web-dev-qa-db-fra.com

Le nombre de publications de Wordpress ne s'affiche pas pour l'auteur de type de publication personnalisé

J'ai créé quelques types de publication personnalisés basés sur le passe-passe de Dave Rupert , puis j'ai migré les publications existantes vers ces CPT nouvellement créés via Post Type Switcher plugin. Je n'ai apporté aucune modification au passe-partout, mis à part le changement d'attributs CPT name et support*.

'supports' => array(
   'title',
   'editor',
   'author',
   'thumbnail',
   'excerpt',
   'comments'
),

Les publications migrées affichent correctement leurs auteurs et il est possible de changer l'auteur. Cependant, lorsque je visualise la liste des auteurs dans la section Utilisateurs , le compteur de publications des auteurs non-administrateurs est zéro (0) . Changer temporairement le rôle d’auteur en administrateur et vice-versa ne permet pas d’afficher le nombre correct de messages pour les auteurs individuels.

J'ai également vérifié les enregistrements de la base de données (vérifiez la vue de la table de wp_posts ci-dessous). Les ID d’auteurs semblent être correctement attribués à des messages individuels. Néanmoins, je pense avoir rompu la relation post-auteur quelque part dans la base de données, mais je peux trouver où.

Est-ce que quelqu'un sait comment aborder ce problème?

view from wp_posts table

1
Metin

C’est une réponse que j’ai republiée à partir d’une question abandonnée. Je pensais que cela vous aiderait à résoudre ce problème

Par défaut, tous les types de publication personnalisés sont exclus de la requête principale. C'est pourquoi vous ne voyez aucune publication lorsque vous accédez à la page de l'auteur front-end. Pour ce faire, vous devrez modifier la requête principale pour inclure ces types de publication/s. Pour ce faire, vous allez utiliser le crochet d'action pre_get_posts . Vous utiliserez également la balise conditionnelle is_author() pour vérifier que vous êtes bien sur la page d’archives de l’auteur. (J'ai testé ce code en utilisant mes types de messages personnalisés event_type et cameras, donc changez-le en conséquence)

function custom_post_author_archive($query) {
    if ($query->is_author() && $query->is_main_query() )
        $query->set( 'post_type', array('event_type', 'cameras', 'post', 'page') );
}
add_action('pre_get_posts', 'custom_post_author_archive');

Pour résoudre le problème du nombre de publications dans le back-end, je pense que ce serait une bonne idée de supprimer la colonne posts dans la page authors, puis de la remplacer par une nouvelle colonne qui comptera tous les types de publications, c.-à-d. Event_type, poste et page. Vous pouvez éditer ceci en conséquence

Ici, vous utiliserez manage_users_columns et manage_users_custom_column qui n’est pas très bien documenté.

function add_extra_user_column($columns) { //Add CPT Column for events and remove default posts column
    unset($columns['posts']);
    return array_merge( $columns, 
              array('foo' => __('Posts')) );
}
add_filter('manage_users_columns' , 'add_extra_user_column');

function add_post_type_column( $value, $column_name, $id ) { //Print event_type value
  if( $column_name == 'foo' ) {
    global $wpdb;
    $count = (int) $wpdb->get_var( $wpdb->prepare(
      "SELECT COUNT(ID) FROM $wpdb->posts WHERE 
       post_type IN ('event_type', 'cameras', 'post', 'page') AND post_status = 'publish' AND post_author = %d",
       $id
    ) );

    if ( $count > 0 ) {
        $r = "<a href='edit.php?author=$id'>";
        $r .= $count;
        $r .= '</a>';
    } else {
        $r = 0;
    }

    return $r;
  }
}

add_filter( 'manage_users_custom_column', 'add_post_type_column', 10, 3 );
2
Pieter Goosen