web-dev-qa-db-ja.com

カスタム投稿タイプで 'mine'の代わりに 'all'フィルタをデフォルトにする

これは迅速で簡単なことだと思います。私の質問は このstackoverflow post とほぼ同じです。

管理者以外のユーザーの場合、投稿のデフォルトのフィルタは「mine」です(完全なフィルタリストは「mine」、「all」、「公表済み」、「下書き」、「保留中」、「ゴミ箱」です)。したがって、たとえば「投稿」をクリックすると、デフォルトで自分の記事のリストが表示されます。欲しいので、 'all'フィルタがデフォルトです。

前述の投稿を使用して、私はこれがこのコードで完璧に投稿のために働くようにしました:

add_action( 'load-edit.php', function() 
{
global $typenow;

// Not our post type, bail out
if( 'post' !== $typenow )
    return;

// Administrator users don't need this, bail out
if( current_user_can('add_users') )
    return;

// Only the Mine tab fills this conditions, redirect
if( !isset( $_GET['post_status'] ) && !isset( $_GET['all_posts'] ) )
{
    wp_redirect( admin_url('edit.php?all_posts=1') );
    exit();
}   
});

すばらしいです!素晴らしい!

しかし、私はこれを私が作成したカスタム投稿タイプにも適用したいと思います。投稿タイプのスラッグは「コミュニティ」、複数形のラベルは「ブログ投稿」、単数形は「ブログ投稿」です。これは、上記のコードに基づいて私が作成したコードです。

add_action( 'load-edit-community.php', function() 
{
global $typenow;

// Not our post type, bail out
if( 'community' !== $typenow )
    return;

// Administrator users don't need this, bail out
if( current_user_can('add_users') )
    return;

// Only the Mine tab fills this conditions, redirect
if( !isset( $_GET['blog_post_status'] ) && !isset( $_GET['all_blog_posts'] ) )
{
    wp_redirect( admin_url('edit.php?post_type=community&all_posts=1') );
    exit();
}   
});

私はいくつかの組み合わせを試しましたが、それでもうまくいくようには思えません(幸運にも、彼らは私のサイトをダウンさせませんでした)。通常の 'post'タイプの作業コードの上下に配置しようとしましたが、問題ありませんでした。

これで任意の助けに感謝します!ありがとう。

編集:これで動作しました。私は間違ったフックに飛び込もうとしていたようです。これが作業コードです:

add_action( 'load-edit.php', function() 
{
global $typenow;

// Not our post type, bail out
if( 'community' !== $typenow )
    return;

// Administrator users don't need this, bail out
if( current_user_can('add_users') )
    return;

// Only the Mine tab fills this conditions, redirect
if( !isset( $_GET['post_status'] ) && !isset( $_GET['all_posts'] ) )
{
    wp_redirect( admin_url('edit.php?post_type=community&all_posts=1') );
    exit();
}   
});

ありがとう@birgire!

1
zk87

答え^^

add_action( 'load-edit.php', function() 
{
global $typenow;

// Not our post type, bail out
if( 'community' !== $typenow )
    return;

// Administrator users don't need this, bail out
if( current_user_can('add_users') )
    return;

// Only the Mine tab fills this conditions, redirect
if( !isset( $_GET['post_status'] ) && !isset( $_GET['all_posts'] ) )
{
    wp_redirect( admin_url('edit.php?post_type=community&all_posts=1') );
    exit();
}   
});
0
zk87

もっと良い解決策はpre_get_postsフックを使ってauthorパラメータを設定解除することだと思います。

それはこのような何かかもしれません:

add_action('pre_get_posts',function($query){
    //Some check. E.g checking a specific user role
    if ( ! current_user_can( 'author' ) ) {
         return;
    }

    unset( $query->query['author'] );
    unset( $query->query_vars['author'] );
});
0