<?php /** * 提示:本示例中的 meta box 是一个跟招聘相关的列表,详细内容是关于地址,薪水,工时这一类的信息。 * 本实例中使用的原代码来自Wordpress官网:https://developer.wordpress.org/reference/functions/add_meta_box/ 的6楼。 * * * 下面的代码:在文章编辑页上调用一个类(Class),名称为:set_job_item。 */ function jobs_item() { new set_job_item(); } if ( is_admin() ) { add_action( 'load-post.php', 'jobs_item' ); add_action( 'load-post-new.php', 'jobs_item' ); } /** * 定义该类(set_job_item)。即上面要调用的类。 */ class set_job_item { /** * Hook(钩)动作执行。 */ public function __construct() { add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) ); add_action( 'save_post', array( $this, 'save' ) ); } /** * 添加 meta box 容器。 * * 关于add_meta_box的用法: * add_meta_box( string $id, string $title, callable $callback, string|array|WP_Screen $screen = null, string $context = 'advanced', string $priority = 'default', array $callback_args = null ) */ public function add_meta_box( $post_type ) { // 定义在哪里使用该meta box。这里定义的是post,文章页。 $post_types = array( 'post'); if ( in_array( $post_type, $post_types ) ) { add_meta_box( 'some_meta_box_name', // ID __( 'Set the items of this job', 'textdomain' ), // Meta box 标题 array( $this, 'render_meta_box_content' ), $post_type, 'advanced', 'high' ); } } /** * 下面的方法是当文章保存的时候,保存meta信息。 */ public function save( $post_id ) { /* * 我们需要验证这是来自当前操作的屏幕, * 因为save_post可以在其他地方被触发,例如,这个文章在另外一个浏览器里也在编辑。 */ // 验证随机数是否被设置 if ( ! isset( $_POST['myplugin_inner_custom_box_nonce'] ) ) { return $post_id; } $nonce = $_POST['myplugin_inner_custom_box_nonce']; // 验证随机数是否合法 if ( ! wp_verify_nonce( $nonce, 'myplugin_inner_custom_box' ) ) { return $post_id; } /* * 如果文章自动保存,什么都不做。 */ if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return $post_id; } // 检查用户权限 if ( 'page' == $_POST['post_type'] ) { if ( ! current_user_can( 'edit_page', $post_id ) ) { return $post_id; } } else { if ( ! current_user_can( 'edit_post', $post_id ) ) { return $post_id; } } // 过滤用户的输入内容令其更加安全 $mydata1 = sanitize_text_field( $_POST['job_item1'] ); $mydata2 = sanitize_text_field( $_POST['job_item2'] ); $mydata3 = sanitize_text_field( $_POST['job_item3'] ); $mydata4 = sanitize_text_field( $_POST['job_item4'] ); $mydata5 = sanitize_text_field( $_POST['job_item5'] ); $mydata6 = sanitize_text_field( $_POST['job_item6'] ); $mydata7 = sanitize_text_field( $_POST['job_item7'] ); $mydata8 = sanitize_text_field( $_POST['job_item8'] ); // 更新时间发生时,用于更新meta表单 update_post_meta( $post_id, '_my_meta_value_key1', $mydata1 ); update_post_meta( $post_id, '_my_meta_value_key2', $mydata2 ); update_post_meta( $post_id, '_my_meta_value_key3', $mydata3 ); update_post_meta( $post_id, '_my_meta_value_key4', $mydata4 ); update_post_meta( $post_id, '_my_meta_value_key5', $mydata5 ); update_post_meta( $post_id, '_my_meta_value_key6', $mydata6 ); update_post_meta( $post_id, '_my_meta_value_key7', $mydata7 ); update_post_meta( $post_id, '_my_meta_value_key8', $mydata8 ); } /** * 渲染meta表单 */ public function render_meta_box_content( $post ) { // 添加随机字段,便于过后检查 wp_nonce_field( 'myplugin_inner_custom_box', 'myplugin_inner_custom_box_nonce' ); // 用 get_post_meta 返回已存在的数据 $value1 = get_post_meta( $post->ID, '_my_meta_value_key1', true ); $value2 = get_post_meta( $post->ID, '_my_meta_value_key2', true ); $value3 = get_post_meta( $post->ID, '_my_meta_value_key3', true ); $value4 = get_post_meta( $post->ID, '_my_meta_value_key4', true ); $value5 = get_post_meta( $post->ID, '_my_meta_value_key5', true ); $value6 = get_post_meta( $post->ID, '_my_meta_value_key6', true ); $value7 = get_post_meta( $post->ID, '_my_meta_value_key7', true ); $value8 = get_post_meta( $post->ID, '_my_meta_value_key8', true ); // 用当前获取的数据填充表单内容 // 也是在这里创建文章编辑页里看到的meta box ?> <ul class="job_items_list"> <li> <label for="job_item1"> <?php _e( '招聘号码', 'textdomain' ); ?> </label> <input type="text" id="job_item1" name="job_item1" value="<?php echo esc_attr( $value1 ); ?>" size="20" /> </li> <li> <label for="job_item2"> <?php _e( '招聘内容', 'textdomain' ); ?> </label> <input type="text" id="job_item2" name="job_item2" value="<?php echo esc_attr( $value2 ); ?>" size="50" /> </li> <li> <label for="job_item3"> <?php _e( '薪资报酬', 'textdomain' ); ?> </label> <input type="text" id="job_item3" name="job_item3" value="<?php echo esc_attr( $value3 ); ?>" size="50" /> </li> <li> <label for="job_item4"> <?php _e( '交通补助', 'textdomain' ); ?> </label> <input type="text" id="job_item4" name="job_item4" value="<?php echo esc_attr( $value4 ); ?>" size="50" /> </li> <li> <label for="job_item5"> <?php _e( '公交地铁', 'textdomain' ); ?> </label> <input type="text" id="job_item5" name="job_item5" value="<?php echo esc_attr( $value5 ); ?>" size="50" /> </li> <li> <label for="job_item6"> <?php _e( '工作时间', 'textdomain' ); ?> </label> <input type="text" id="job_item6" name="job_item6" value="<?php echo esc_attr( $value6 ); ?>" size="50" /> </li> <li> <label for="job_item7"> <?php _e( '休息时间', 'textdomain' ); ?> </label> <input type="text" id="job_item7" name="job_item7" value="<?php echo esc_attr( $value7 ); ?>" size="50" /> </li> <li> <label for="job_item8"> <?php _e( '其它说明', 'textdomain' ); ?> </label> <input type="text" id="job_item8" name="job_item8" value="<?php echo esc_attr( $value8 ); ?>" size="50" /> </li> </ul> <?php } } ?>
评论区
发表新的留言
您可以留言提出您的疑问或建议。
您的留言得到回复时,会通过您填写的邮箱提醒您。