使用 register_post_status() 在 WordPress 创建自定义文章状态
关于WordPress自定义文章状态
大多数情况下,WordPress提供的“已发布”、“私密”、“密码保护”等文章状态足够我们使用,不需要创建自定义文章状态。但在遇到特殊需求时,创建自定义文章状态可以更清晰、更合理地处理内容。例如,有一个自定义文章状态需要显示为通知,而对用户而言仍然是可见的。默认的文章状态不能满足此需求,所以必须创建自定义文章状态。本文将介绍如何使用WordPress提供的函数来创建自定义文章状态,以及如何将其添加到文章状态下拉选项和文章类型列表中。
注册WordPress自定义文章状态‘archive’
要在当前主题中创建自定义文章状态,注册一个自定义文章状态,就可以在文章列表中看到筛选链接。要创建一个自定义文章状态,需要在主题的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文章状态下拉选项
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添加自定义文章状态的函数不太简单直接,如果需求比较多,可以通过插件来添加,从而减少代码量。

-
WordPress网站的安全插件:wordfence 2023-09-14 09:25:18
-
创建Vue组件详细教程 2023-09-10 00:23:17
-
WordPress 6.3 支持在手动更新插件和主题失败后回滚旧版本 2023-08-28 16:58:45
-
WordPress 6.3版本(2023年8月)性能提升了哪些? 2023-08-28 16:56:02
-
Astra 主题团队推出人工智能驱动的 WordPress 网站创建平台 – ZIPWP 2023-08-28 16:49:54
-
WordPress 宣布将为用户提供 100 年域名托管服务 2023-08-28 16:45:27
-
PHP判断if else 和 switch case的区别盘点 2023-07-29 15:11:11
-
详解WordPress独立站SEM中的OCPC方法(含百度推广OCPC与谷歌OCPC) 2023-07-19 08:01:30
-
WordPress的古腾堡全站编辑器site-editor.php介绍(附:site-editor.php启用代码) 2023-07-16 08:01:57
-
WordPress的Customize Partial功能最全介绍(含:demo代码) 2023-07-16 00:21:56