WordPress中设置Post Type自定义文章类型的实例教程
| 这里我们添加两个分类作为演示。 add_meta_box( $id, $title, $callback, $post_type, $context,$priority, $callback_args ); 老规矩,具体参数内容查看官方文档,这里只介绍常用用法。我们注册一个 Meta Box : 
add_action( 'add_meta_boxes', 'movie_director' );
function movie_director() {
  add_meta_box(
    'movie_director',
    '电影导演',
    'movie_director_meta_box',
    'movie',
    'side',
    'low'
  );
}
然后在配置参数里面指定了回调函数 movie_director_meta_box,我们需要在这个函数里面创建表单: 
function movie_director_meta_box($post) {
  // 创建临时隐藏表单,为了安全
  wp_nonce_field( 'movie_director_meta_box', 'movie_director_meta_box_nonce' );
  // 获取之前存储的值
  $value = get_post_meta( $post-gt;ID, '_movie_director', true );
  #63;gt;
  lt;label for="movie_director"gt;lt;/labelgt;
  lt;input type="text" id="movie_director" name="movie_director" value="lt;#63;php echo esc_attr( $value ); #63;gt;" placeholder="输入导演名称" gt;
  lt;#63;php
}
这样就可以在文章界面边栏显示出来刚刚创建的表单了: 
 但是这时候,你的表单是没法用的,因为你提交文章之后并没有保存这个 Meta Box 的内容,下面是验证保存内容的代码: 
add_action( 'save_post', 'movie_director_save_meta_box' );
function movie_director_save_meta_box($post_id){
  // 安全检查
  // 检查是否发送了一次性隐藏表单内容(判断是否为第三者模拟提交)
  if ( ! isset( $_POST['movie_director_meta_box_nonce'] ) ) {
    return;
  }
  // 判断隐藏表单的值与之前是否相同
  if ( ! wp_verify_nonce( $_POST['movie_director_meta_box_nonce'], 'movie_director_meta_box' ) ) {
    return;
  }
  // 判断该用户是否有权限
  if ( ! current_user_can( 'edit_post', $post_id ) ) {
    return;
  }
  // 判断 Meta Box 是否为空
  if ( ! isset( $_POST['movie_director'] ) ) {
    return;
  }
  $movie_director = sanitize_text_field( $_POST['movie_director'] );
  update_post_meta( $post_id, '_movie_director', $movie_director );
}
虽然最关键的函数就在最后一句,但是一定要注意安全的校验。把这些代码添加进 functions.php 文件之后,你的 Meta Box 就可以正常工作了。如果你需要更多表单,按照这个模式自定义表单结构,然后添加保存函数即可。 
 
 添加完之后,我们可以看下所有电影: 
 列表空荡荡的,好难看,我可不可以加上导演字段?当然可以,使用 [manage $post type posts custom column](http://codex.wordpress.org/Plugin_API/Action_Reference/manage_$post_type_posts_custom_column) 即可实现,我们添加: 
add_action("manage_posts_custom_column", "movie_custom_columns");
add_filter("manage_edit-movie_columns", "movie_edit_columns");
function movie_custom_columns($column){
  global $post;
  switch ($column) {
    case "movie_director":
      echo get_post_meta( $post-gt;ID, '_movie_director', true );
      break;
  }
}
function movie_edit_columns($columns){
  $columns['movie_director'] = '导演';
  return $columns;
}
即添加了列导演字段,并从每篇文章中读取出来。这样我们的列表就变成了: 
 OK,我们的后端部分就这样愉快的完成了。打开生成好的链接看下,咦,Not Found?是这样的,如果你的网站设置了固定连接,当你新建了 Post Type 之后,你必须要在后台更新一下固定连接设置才行。找到后台固定连接,再点击一下下面的“保存设置”,之后就可以正常访问了。 echo '导演:'.get_post_meta( get_the_ID(), '_movie_director', true ); (编辑:源码网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 





