IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WordPress PHP Discussion :

Archives WordPress par auteur pour des CPT


Sujet :

WordPress PHP

  1. #1
    Candidat au Club Avatar de jpr1058
    Homme Profil pro
    Informaticien (retraite)
    Inscrit en
    Septembre 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Informaticien (retraite)

    Informations forums :
    Inscription : Septembre 2020
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Archives WordPress par auteur pour des CPT
    Bonjour,

    Je bute sur un problème

    Je pratique les Custom Post Types depuis un moment et trouve cela très pratique.

    Néanmoins c'est la première fois que j'ai à gérer des archives d'auteur sur des publications personnalisées (CPT).

    Or j'ai lu partout que les archives par auteurs ne sont supportées, en standard dans WordPress que pour les articles (type de publication = post).

    Lorsque que j'essaie de faire un modèle Elementor de type 'archive auteur', cela fonctionne parfaitement sur des articles (pagination correcte), par contre le même modèle sur des CPT se plante dès la page 2 (page not found avec ce type d'URL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... URL du site.../author/slug auteur/page/2/
    Any help les amis ?

    Merci - Jean-Paul

  2. #2
    Candidat au Club Avatar de jpr1058
    Homme Profil pro
    Informaticien (retraite)
    Inscrit en
    Septembre 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Informaticien (retraite)

    Informations forums :
    Inscription : Septembre 2020
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Ça y est j'ai trouvé !
    Ci après ma solution si cela peut aider...

    Tout d'abord j'ai vérifié que la pagination fonctionnait bien.
    Pour cela j'ai pris toutes les publications d'un auteur "prolifique' (63 publications) et je les ai 'basculées' en articles normaux (post_type=post) grâce au plugin Post Type Switcher.
    Bingo, tout fonctionnait parfaitement pour ces 63 publications
    Donc ce n'était pas un problème de pagination !

    Je suis alors tombé sur cet article
    J'ai donc ajouté ceci dans le fichier functions.php de mon thème enfant où 'lgsjpa' est le slug de mon Custom Post Type

    Du coup, nickel, tout fonctionne !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function post_types_author_archives($query) {
     
        // Add ‘videos’ post type to author archives
        // Add your own Post types in single quotes before 'post'
        if ( $query->is_author ) {
            $query->set( 'post_type', array('lgsjpa','post') );
            // Remove the action after it’s run
            remove_action( 'pre_get_posts', 'post_types_author_archives' );
        }
    }
    add_action( 'pre_get_posts', 'post_types_author_archives' );
    Maintenant, cerise sur le gâteau, l'idée est de disposer d'une liste d'auteurs ayant produit des publications de type 'lgsjpa' avec leurs nombres.
    Bien sûr, en cliquant sur le nom de l'auteur on accédera aux dites publications

    Ben je n'ai pas trouvé et comme on dit : "on n'est jamais si bien servi que par soi-même !"

    Du coup, installation du plugin Insert PHP Code Snippet.
    Puis création du snippet PHP suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <?php
    // On récupère l'URL du site pour la passer à la requête SQL
     
    $siteURL = get_site_url();
     
    // Mise en forme de la requête SQL
     
    $auteurslgsjpas = $wpdb->get_results(
    "
    SELECT U.display_name AS NomPublic, 
    UM.meta_value AS Nom, 
    COUNT(*) AS NbPosts, 
    CONCAT('$siteURL/author/', U.user_login, '/') AS URLAuteur
    FROM 
    `fjpa_posts` AS P, 
    `fjpa_users` AS U, 
    `fjpa_usermeta` AS UM 
    WHERE P.post_author=U.ID 
    AND U.ID=UM.user_id 
    AND P.post_type='lgsjpa' 
    AND UM. meta_key = 'last_name' 
    GROUP by U.user_login
    ORDER by NbPosts DESC, Nom ASC
    "
    );
     
    // Lecture du résultat de la requête SQL
     
    foreach ( $auteurslgsjpas as $auteurslgsjpa ) {
    echo "<a href='$auteurslgsjpa->URLAuteur'>$auteurslgsjpa->NomPublic</a>" . ' (' . $auteurslgsjpa->NbPosts . ')';
    echo "<br>";
    }
     
    // C'est fini
    Le plugin génère un shortcode à utiliser où nécessaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [xyz-ips snippet="Query-Auteurs-de-publications-LGSJPA"]
    En conclusion :

    • Non, je ne remets pas en cause les CPT

    • Oui, je n'avais jamais 'exploré' l'aspect 'archives par auteurs' des CPT

    • Oui, je trouve que les CPT devraient être mieux intégrées à WordPress, gérer tout cela 'à l'os' est bien chronophage


    Espérant avoir été utile - Enjoy

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] Créer une alerte par mail pour des dates expirées
    Par RemiEJ dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/07/2019, 14h27
  2. Réponses: 6
    Dernier message: 12/05/2017, 14h14
  3. Réponses: 1
    Dernier message: 06/09/2011, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo