<?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
}
}
?>
评论区
发表新的留言
您可以留言提出您的疑问或建议。
您的留言得到回复时,会通过您填写的邮箱提醒您。