寄存器_POST_STATUS和SHOW_IN_ADMIN_ALL_LIST

时间:2012-10-09 作者:Xaver

我有一个自定义的帖子状态,它应该是公共可见的,但不显示在编辑屏幕的“所有”列表中。

这是我注册帖子状态的方式:

register_post_status(\'my_custom_post_status\', array(
    \'label\' => __(\'The Label\', \'domain\'),
    \'public\' => true,
    \'exclude_from_search\' => true,
    \'show_in_admin_all_list\' => false,
    \'label_count\' => //blablabla
));
Theshow_in_admin_all_list = false 应该在所有列表中隐藏状态,但不会。只有当我将public设置为false时,它才可见。但我需要public = true!

有什么想法吗

法典:http://codex.wordpress.org/Function_Reference/register_post_status

4 个回复
最合适的回答,由SO网友:Xaver 整理而成

这解决了我的问题:

register_post_status(\'my_custom_post_status\', array(
    \'label\' => __(\'The Label\', \'domain\'),
    \'public\' => !is_admin(),
    \'exclude_from_search\' => true,
    \'show_in_admin_all_list\' => false,
    \'label_count\' => //blablabla
));
!is_admin() 使状态仅在frontpage上公开。

如果你找到了更好的解决方案,请在这里发布!

SO网友:Spyros

受@revaxarts启发,我的方法是:

if (is_admin() && $_GET[\'post_type\'] == \'post\') {
  $makepublic = true;
} else {
  $makepublic = false;
}

register_post_status( \'suspended\', array(
      \'label\'                     => _x( \'suspended\', \'Status General Name\', \'myadvert\' ),
      \'public\'                    => $makepublic,
      \'exclude_from_search\'       => true,
      \'show_in_admin_all_list\'    => true,
      \'show_in_admin_status_list\' => true,
      \'label_count\'               => _n_noop( \'Suspended <span class="count">(%s)</span>\', \'Suspended <span class="count">(%s)</span>\' )
 ) );
因为当我以管理员身份登录时,我不想让它在前端看到这些帖子。

SO网友:Guicara

如果您不想更改public 参数,因为您希望对帖子有更多的控制,所以还应该钩住pre_get_posts 更改主查询的操作:

/**
 * Display all posts on edit.php
 * Bug fix: the \'show_in_admin_all_list\' argument for the \'register_post_status\' function is ignored when the argument \'public\' is set to \'false\'
 * @link https://core.trac.wordpress.org/ticket/24415
 */
add_action(\'pre_get_posts\', function($query) {
    global $pagenow;

    if (!is_admin() || $query->query[\'post_type\'] != \'YOUR_CPT\' || $pagenow != \'edit.php\') {
        return;
    }

    if (!isset($_GET[\'post_status\']) || empty($_GET[\'post_status\']) || (isset($_GET[\'post_status\']) && $_GET[\'post_status\'] == \'all\')) {
        $query->set( \'post_status\', array(\'publish\', \'draft\', \'foo\', \'bar\'));
    }
});

SO网友:thamarai selvan

我正在使用publish press插件创建自定义帖子状态我将所有帖子状态更改为public,使用

register_post_status(
  $status->slug,
  [
    \'label\'       => $status->name,
    \'public\'   => true,
    \'exclude_from_search\'       => true,
    \'show_in_admin_all_list\'    => true,
    \'show_in_admin_status_list\' => true,
    \'_builtin\'    => false,
    \'label_count\' => _n_noop("{$status->name} <span class=\'count\'>(%s)</span>","{$status->name} <span class=\'count\'>(%s)</span>"),
  ]
);
所有立柱显示在前端,但edit.php all post page not working 它没有显示与自定义帖子类型相关的所有帖子,也影响了woocommerce

结束

相关推荐