时间:2024-04-02
大多数情况下,WordPress提供的“已发布”、“私密”、“密码保护”等文章状态足够我们使用,不需要创建自定义文章状态。但在遇到特殊需求时,创建自定义文章状态可以更清晰、更合理地处理内容。例如,有一个自定义文章状态需要显示为通知,而对用户而言仍然是可见的。默认的文章状态不能满足此需求,所以必须创建自定义文章状态。本文将介绍如何使用WordPress提供的函数来创建自定义文章状态,以及如何将其添加到文章状态下拉选项和文章类型列表中。
要在当前主题中创建自定义文章状态,注册一个自定义文章状态,就可以在文章列表中看到筛选链接。要创建一个自定义文章状态,需要在主题的functions.php文件中添加下面的函数注册代码。
<?php function wizhi_custom_post_status(){ register_post_status('archive',array( 'label' => _x('Archive','post'), 'public' => true, 'show_in_admin_all_list' => false, 'show_in_admin_status_list' => true, 'label_count' => _n_noop('Archive<span class="count">(%s)</span>','Archive<span class="count">(%s)</span>') )); } add_action('init','wizhi_custom_post_status'); ?>
在WordPress初始化时,需要挂载注册自定义文章状态的函数,传入一个参数数组到函数register_post_status完成注册自定义文章状态。完整参数列表请参考官方文档。
WordPress自定义文章状态可以不要显示在编辑页面的文章状态下拉菜单中,而是通过代码添加到下拉菜单中。要完成此操作,需要在主题的functions.php文件中添加下面的代码:
add_action('admin_footer-post.php', 'wizhi_append_post_status_list'); function wizhi_append_post_status_list(){ global $post; $complete= ''; $label= ''; if($post->post_type=='post'){ if($post->post_status=='archive'){ $complete='selected="selected"'; $label='<span id="post-status-display">Archive</span>'; } echo' <script> jQuery(document).ready(function($){ $("select#post_status").append("<option value="archive"'.$complete.'>Archive</option>"); $(".misc-pub-section label").append("'.$label.'"); }); </script> '; } }
上面的代码将在post.php页面的页脚中添加一段jQuery代码。可以通过替换上面代码中的“post”来添加自定义文章状态到自定义文章类型的下拉菜单中。
添加好代码后,编辑一个已发布的文章,然后尝试修改文章状态,如果一切工作正常,应该能看到下拉菜单中的“Archive”选项,如下图所示。
设置文章状态为“Archive”,并更新文章。然后回到文章列表,我们应该看到文章状态筛选器后面的“Archive”链接,如下图所示。
为了更好地区分自定义文章状态和普通文章,我们可以添加一个文章状态后缀到文章标题后面,类似默认的“私有”文章状态。要实现此目的,可以在主题的functions.php文件中添加以下代码:
function wizhi_display_archive_state($states){ global $post; $arg= get_query_var('post_status'); if($arg!= 'archive'){ if($post->post_status== 'archive'){ return array('Archive'); } } return $states; } add_filter('display_post_states', 'wizhi_display_archive_state');
通过自定义文章状态,可以为文章添加不同的状态,例如指定文章类型为“订单”,则可以为该类型添加“已支付”、“已发货”、“已完成”等状态。如果指定文章类型为“商品”,则可以为该类型添加“已过期”、“已上市”、“众筹中”等状态。通过自定义文章状态,可以实现不同的功能。但是,与其他功能注册函数不同,WordPress添加自定义文章状态的函数不太简单直接,如果需求比较多,可以通过插件来添加,从而减少代码量。
Copyright © 2019-2024 jsp.hk