web-dev-qa-db-fra.com

Fusionner deux types de publication personnalisés dans une page d'administration?

Je construis un site avec 4 types de messages personnalisés. Pour simplifier les choses pour notre client/administrateur, je me demande s’il existe un moyen de fusionner ces types de publication personnalisés en une seule liste dans le backend? Comme si vous regardiez la page d’administrateur normale avec la liste et les colonnes de publications, une page comme celle-ci peut-elle extraire 3 autres types de publication pour faciliter le tri/la recherche?

Je ne peux pas combiner les CPT en un seul, ils doivent rester séparés en dehors d'une page de visualisation dans la zone d'administration, si possible.

Des idées sur la façon de faire cela?? Ou même par où commencer à chercher/penser à comment développer cela?

9
Aaron

Juste un point de départ, car des problèmes apparaîtront sûrement au cours du développement ultérieur. Par exemple, pour le moment, la fonctionnalité de recherche est interrompue car elle attend une chaîne (post_type) et reçoit un tableau.

Pour répertorier plus d’un type de message dans l’écran Messages, nous nous connectons à pre_get_posts et modifions la requête. Dans ce test, les articles, les pages et les produits seront affichés ensemble dans l'écran Articles (http://example.com/wp-admin/edit.php).

add_action( 'pre_get_posts', 'join_cpt_list_wspe_113808' );

function join_cpt_list_wspe_113808( $query ) 
{
    // If not backend, bail out
    if( !is_admin() )
        return $query;

    // Detect current page and list of CPTs to be shown in Dashboard > Posts > Edit screen
    global $pagenow;
    $cpts = array( 'post', 'page', 'product' );

    if( 'edit.php' == $pagenow && ( get_query_var('post_type') && 'post' == get_query_var('post_type') ) )
        $query->set( 'post_type', $cpts );

    return $query;
}

Un code d'assistance pour afficher une colonne avec chaque publication Type de publication:

add_filter( 'manage_edit-post_columns', 'add_cpt_column_wspe_113808' );
foreach( array( 'post', 'page', 'product' ) as $cpt )
    add_action( "manage_{$cpt}_posts_custom_column", 'show_cpt_column_wspe_113808', 10, 2 );

function add_cpt_column_wspe_113808( $columns ) 
{
    $columns[ 'cpt' ] = 'Post Type';
    return $columns;
}

function show_cpt_column_wspe_113808( $column_name, $post_id ) 
{
    if ( 'cpt' != $column_name )
        return;
    echo get_post_type( $post_id );
}
2
brasofilo

Je recommanderais Admin Menu Editor pro pour cela. Je vais créer un lien vers le bas.

Intéressant. Sur un certain projet sur lequel je travaillais, j'avais plusieurs CPT (types de messages personnalisés) qui étaient en quelque sorte liés. La section était "Centre d'information" et ils souhaitaient que les communiqués de presse, les livres blancs, les témoignages, etc. fussent au sein du centre d'information. Au début, créer cela était facile. En bout de ligne, nous voulions aussi que le tout s'emboîte logiquement. La plupart des types de messages personnalisés ont été définis en tant que CPT en raison de leur contenu spécifique (méta-fichiers) et de la présentation requise. Nous avons fini par avoir, comme, près de 20 CPT.

Cela dit, nous avons utilisé le plugin admin editor pour supprimer les CPT Info Centre associés du menu principal, puis un menu "Info Centre" avec les liens CPT correspondants. Bien qu'ils semblaient tous combinés, ils ne l'étaient pas.

Voici le lien du plugin: http://adminmenueditor.com/ essayez aussi la démo.

0
Alex V.