web-dev-qa-db-ja.com

register_post_statusおよびshow_in_admin_all_list

カスタム投稿ステータスが公開されているはずですが、編集画面の[all]リストには表示されません。

これは私が投稿ステータスを登録する方法です:

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
));

show_in_admin_all_list = falseはall-listのステータスを隠すべきですが、それは隠しません。パブリックをfalseに設定した場合にのみ表示されません。しかし、私はpublic = trueが必要です!

何か案は

コーデックス: http://codex.wordpress.org/Function_Reference/register_post_status

5
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()はフロントページでのみステータスを公開します。

より良い解決策が見つかった場合は、こちらに投稿してください。

8
Xaver

これを使用して、公開プレスプラグインを使用してカスタム投稿ステータスを作成し、すべての投稿ステータスをパブリックに変更しました

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すべての投稿ページが機能しませんカスタム投稿タイプに関連するすべての投稿を表示せず、woocommerceにも影響します

0
thamarai selvan

@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>' )
 ) );

Adminとしてログインしている間はフロントエンドでそれらの投稿を見たくないからです。

0
Spyros

投稿をより細かく制御したいために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'));
    }
});
0
Guicara