我创建了新的帖子状态。以下来自我的自定义插件的代码:
add_action('init', 'new_post_status_add');
function new_post_status_add () {
register_post_status('refused', array(
'label' => _x('Refused', 'post'),
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop('Refused <span class="count">(%s)</span>', 'Refused <span class="count">(%s)</span>'),
));
}
我该怎样做才能提供状态?
答案 0 :(得分:1)
很抱歉延迟回复。我希望我的评论可以帮助其他人。
自定义帖子状态是一个未解决的问题,已经存在了很长时间,或者至少从8年前开始在Wordpress网站上here。
Wordpress在codex文档中注明函数register_post_status()
:
此功能不将已注册的帖子状态添加到管理面板。此功能正在等待未来的开发。请参考 到Trac Ticket #12706。考虑动作钩子 post_submitbox_misc_actions用于添加此参数。
我可以使用其中一个项目来解决这个问题。我混合了this url和this url上描述的解决方案。
摘要是Wordpress不会自动显示自定义帖子状态。需要使用主题function.php
来操纵它。
创建自定义帖子状态,与您提到的相同。只是,不要忘记“在'init'动作之前不应该调用此函数。”
function j_custom_post_status() {
$args_h = array(
'label' => _x( 'Refused', 'post'),
'label_count' => _n_noop( 'Refused <span class="count">(%s)</span>', 'Refused (%s)', 'post' ),
'public' => false,
'internal' => true,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'exclude_from_search' => false,
);
register_post_status( 'j_refused', $args );
add_action( 'init', 'j_custom_post_status', 0 );
我使用WP Generator获取上面的代码段。
调整管理面板以在帖子列表页面edit.php
上的快速编辑菜单(QE)中显示自定义状态。我们需要JQuery的帮助才能这样做,我们需要将JQuery代码添加到Admin Panel页脚。
function j_append_status_list(){
//array of all custom status that you created
$arr_customstatus = array(
'refused',
'other_custom_status',
);
echo '<script>';
//flush
$tmp = '';
//generate string
foreach ($arr_customstatus as $pkey ) {
$tmp.= "<option value=\"". $pkey ."\">". $pkey ."</option>";
}
echo "jQuery(document).ready( function() { jQuery( 'select[name=\"_status\"]' ).append( ". $tmp ." );
});";
echo '</script>';
}
add_action('admin_footer-edit.php','j_append_status_list');
注意:如果以前修改了帖子的状态,上面的功能不会自动选择QE中的状态。要将selected="true"
添加到该选项,您需要使用global $post
并检查当前状态,与下面第三步中使用的方法相同。
现在,我们还需要将自定义帖子状态元数据添加到帖子编辑页面。
function j_custom_status_metabox(){
global $post;
$custom = get_post_custom( $post->ID );
$status = $custom["_status"][0];
// Array of custom status messages
$arr_customstatus = array(
'refused',
'other_custom_status',
);
//Flush
$tmp = '';
foreach( $jstats as $pkey ) {
if( $status == $pkey ){
$tmp.= '<option value="'.$pkey.'" selected="true">'. $pkey .'</option>';
} else {
$tmp.= '<option value="'. $pkey .'">'. $pkey .'</option>';
}
}
echo '<script>';
echo "jQuery(document).ready( function() { jQuery( 'select[name=\"_status\"]' ).append( ". $tmp ." );
});";
echo '</script>';
}
add_action('admin_footer-post.php','j_custom_status_metabox');
add_action('admin_footer-post-new.php','j_custom_status_metabox');
如果您想根据自定义帖子状态在帖子列表中显示消息,您也可以添加此功能。但是,这是可选的。
function j_display_status_label( $statuses ) {
global $post;
//Display label on all posts list but not on the custom status list
if( get_query_var( 'post_status' ) != 'refused' ){
if( $post->post_status == 'refused' ){
return array('Refused');
}
}
return $statuses;
}
add_filter( 'display_post_states', 'j_display_status_label' );
注意:上述功能不包括所有未来的自定义状态。如果需要,您需要添加foreach
循环。
答案 1 :(得分:0)
尝试使用此代码,
// Register Custom Status
function custom_post_status() {
$args = array(
'label' => _x( 'Refused', 'Status General Name', 'text_domain' ),
'label_count' => _n_noop( 'Refused (%s)', ' (%s)', 'text_domain' ),
'public' => true,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'exclude_from_search' => false,
);
register_post_status( 'refused', $args );
}
add_action( 'init', 'custom_post_status', 0 );
我希望这对你有用。
答案 2 :(得分:0)
尝试将 PHP_INT_MAX
添加到您的 j_custom_post_status
操作
add_action( 'init', 'j_custom_post_status', PHP_INT_MAX );