web-dev-qa-db-fra.com

Définissez le filtre par défaut "tous" au lieu de "mine" dans un type de publication personnalisé

Je pense que celui-ci est rapide et facile ... Je pense qu'il me manque quelque chose de très évident. Ma demande est presque identique à cet article stackoverflow .

Pour les utilisateurs non-administrateurs, le filtre par défaut pour les publications est 'mine' (la liste complète des filtres étant: mine, toutes, publiées, brouillons, en attente, corbeille). Ainsi, lorsqu'ils cliquent sur "publications" par exemple, une liste de leurs propres articles leur est attribuée par défaut. Je le veux donc le filtre "tous" est la valeur par défaut.

En utilisant le post mentionné précédemment, cela fonctionne parfaitement pour les posts avec ce code:

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

Génial! Merveilleux!

Mais je souhaite également appliquer cela à un type de publication personnalisé que j'ai créé. Le slug du type de message est 'community', le label pluriel est 'Blog Posts' et le singulier est 'Blog Post'. Ceci est le code que j'ai produit sur la base du code ci-dessus:

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

J'ai essayé quelques combinaisons, mais je n'arrive toujours pas à le faire fonctionner (heureusement, mon site n'a pas été supprimé). J'ai essayé de placer ceci au-dessus et au-dessous du code de travail pour le type "post" régulier, mais cela importait peu.

J'apprécierais toute aide avec ceci! Merci.

EDIT: ça marche maintenant. Il semble que j'essayais de sauter sur un faux crochet. voici le code de travail:

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

merci @birgire!

1
zk87

répondre ^^

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

Je pense qu'une meilleure solution consisterait à utiliser le hook pre_get_posts et à désactiver le paramètre author.

Cela pourrait être quelque chose comme ça:

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