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 ); (编辑:源码网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |