Comment récupérer le post format d’un article en dehors de la boucle

  • Statut : non résolu
15 sujets de 1 à 15 (sur un total de 20)
  • Auteur
    Messages
  • #542156
    HDCms
    Participant
    Chevalier WordPress
    144 contributions

    Bonjour,

    Ma configuration WP actuelle
    – Version de WordPress : 4.0
    – Version de PHP/MySQL : 5.4.4[/b] :

    Problème(s) rencontré(s) :

    Je n’arrive pas à récupérer le post format d’un article dans une fonction externe à la loop.
    J’ai essayé différents codes trouvés sur le web mais sans succès 😕

    #972683
    didier07
    Participant
    Maître WordPress
    1965 contributions

    Tu as quoi come info sur ton article au moment ou t’en a besoin ?

    #972684
    HDCms
    Participant
    Chevalier WordPress
    144 contributions

    la page est visible là: http://actifs.biz/test-site-a/
    je voudrai afficher un texte en fonction du post-format (en derniers recours categorie) correspondant à l’article

    #972685
    Lumiere de Lune
    Participant
    Maître WordPress
    19385 contributions

    Oui, enfin plutôt que la page, c’est ton code qui serait intéressant

    Et où veux tu exactement afficher le texte ? Parce que dans un template de type single ou page, tu « es » dans la boucle

    #972686
    HDCms
    Participant
    Chevalier WordPress
    144 contributions

    Bonjour,

    Ok mon fichier était devenu une véritable « cacaphonie » 😉 de test. Voici le code simplifié

    function affic_site($content) { /*champs à affichés pour un article de format link */
     $content .=’<h1>LIEN</h1>‘;
     return $content;
    }
    
    if (has_post_format(‘link’)) {add_filter(‘the_content’, ‘affic_site’);}

    celui-ci se trouve dans une fonction (ou plutôt plugin de fonction) donc j’imagine que je n’ai pas accès « comme ça » à des variables.

    L’idée étant d’afficher du contenu selon le type de format (lié à l’article).
    J’espère avoir été plus clair

    Quelques unes de mes tentatives (mais a chaque fois , je n’avais aucun retour ou false avec var_dump :()

    global $post; 
    /* on stocke la variable dans un nom de variable inutilisé */
    $sky_post_ID = $post->ID; 
    /* on affiche cette variable */
    echo $sky_post_ID;
    
    /* on fait de $wp_query une variable globale */
    global $wp_query; 
    /* on stocke la variable dans un nom de variable inutilisé */
    $sky_post_ID = $wp_query->post->ID; 
    /* on echo cette variable */
    echo $sky_post_ID;

    #972687
    didier07
    Participant
    Maître WordPress
    1965 contributions
    HDCms wrote:
    if (has_post_format(‘link’)) {add_filter(‘the_content’, ‘affic_site’);}

    Je crois que tu as bien compris le principe à utiliser, (et le var_dump 😉 ) mais que tu l’utilises mal.

    Dans un plugin, has_post_format ne te dira rien, car la fonction has_post_format doit être appelée pour un post donné.

    add_filter(‘the_content’, ‘affic_site’);
    function affic_site( $post ) {
    if ( $post->post_format == ‘link’ ) {
    return ‘<h1>LINK</h1>‘.$post->post_content;
    }
    }

    La variable $post envoyé dans ton filtre n’est surement pas un objet WP_Post. Il faudra surement un autre filtre que the content pour le faire.
    Peut etre que quelque chose du genre

    add_filter(‘????????????’, ‘filtre_content’);
    function ?????????( $post ) {
    if ( $post->post_format == ‘link’ ) {
    add_filter( ‘the_content’, ‘affic_site’));
    }
    function affic_site($content) {
     $content .=’<h1>LIEN</h1>‘;
     return $content;
    }
    }

    avec un filtre qui te donne le contenu complet du post en parametre

    Je te laisse approfondir, mais l’idée me semble là

    Didier

    #972688
    HDCms
    Participant
    Chevalier WordPress
    144 contributions

    Bonjour

    Bon j’ai essayé mais j’ai du mal à comprendre l’imbrication:/

    Il y a quand même quelque chose qui me gêne fondamentalement c’est de ne pas arriver à avoir les variables correspondant au post en dehors de la boucle

    J’essaye

    global $post; 
    /* on stocke la variable dans un nom de variable inutilisé */
    $sky_post_ID = $post->ID; 
    /* on affiche cette variable */
    var_dump($sky_post_ID);
    
    /* on fait de $wp_query une variable globale */
    global $wp_query; 
    /* on stocke la variable dans un nom de variable inutilisé */
    $sky_post_ID = $wp_query->post->ID; 
    /* on echo cette variable */
    var_dump($sky_post_ID);
    
    $format = get_post_format(468);
    var_dump($format);

    mais j’ai comme retour:
    NULL NULL bool(false)

    car si je récupère l’id du post, normalement je suis sauvé car normalement je pourrai récupéré le format en dehors de la loop http://codex.wordpress.org/Function_Reference/get_post_format … si j’ai bien compris

    #972682
    Lumiere de Lune
    Participant
    Maître WordPress
    19385 contributions

    Si tu es en dehors de la boucle $post n’est certainement pas un post unique, donc $post->ID ne marche pas

    Tu peux aussi faire un var_dump de $post ce qui te permet de « voir »

    D’une manière générale, en dehors de la boucle, il vaut mieux utiliser get_the_ID()

    #972689
    HDCms
    Participant
    Chevalier WordPress
    144 contributions

    Bonjour,

    J’ai mis dans function.php

    $id = get_the_ID();
    echo ‘$id= ‘ ;
    var_dump($id);

    J’ai le retour:
    $id= bool(false)

    sur la page http://actifs.biz/test-site-a/
    qui est bien un post avec un id=468

    Je suis perdu 😉
    J’ai essayé plusieurs pistes et compris certaines erreurs mais il y a encore un truc … certainement bête qui m’échappe

    #972690
    Lumiere de Lune
    Participant
    Maître WordPress
    19385 contributions

    Désolée, mais on ne peut pas bosser sur des petits bouts de code comme ça…

    as tu fait un var_dump de $post ?

    #972691
    HDCms
    Participant
    Chevalier WordPress
    144 contributions

    Je n’ai pas réaffiché le reste car il n’a pas changé.
    Je me concentrais sur la récupération de l’id puisque je ne peux rien faire sans l’id :-(

    voici donc le code complet dans le fichier function.php (mais au final que je souhaiterai mettre dans un plugin de fonction je ne sais pas s’il y a des différences ?)

    $id = get_the_ID();
    echo ‘$id= ‘ ;
    var_dump($id);
    
    echo ‘$post=’ ;
    var_dump($post);
    
    $format = get_post_format( $id );
    if ($format=’link’)  {add_filter(‘the_content’, ‘affic_site’);}
    
    function affic_site($content) { /*champs à affichés pour un article de format link */
     $content .=’<h1>LIEN</h1>‘;
     return $content;
    }

    la sortie (visible sur la page de test http://actifs.biz/test-site-a/) me donne
    $post=NULL

    J’ai aussi changé de thème en le mettant dans function.php du thème twentyfourteen, pour être sur qu’il n’y ait pas d’interférence, mais j’ai la même sortie

    Comme cela m’embête pas mal, j’ai mis en mode debug

    define(‘WP_DEBUG’, true);
    define(‘WP_DEBUG_DISPLAY’,false);
    define(‘WP_DEBUG_LOG’,true);

    mais je ne vois pas le fichier de log /wp-content/debug.log !!
    pas de problème ?

    #972692
    Lumiere de Lune
    Participant
    Maître WordPress
    19385 contributions

    Bon alors…

    1- soyons logique, tu devrais regarder $post avant l’id

    que donne ton var_dump de $post ?

    #972693
    HDCms
    Participant
    Chevalier WordPress
    144 contributions

    euh (y a qq chose qui m’échappe)

    j’avai mis dans mon msg pércédent
    la sortie (visible sur la page de test http://actifs.biz/test-site-a/) me donne
    $post=NULL

    mon code actuel

    echo ‘$post=’ ;
    var_dump($post);
    
    $format = get_post_format( $id );
    if ($format=’link’)  {add_filter(‘the_content’, ‘affic_site’);}
    
    function affic_site($content) { /*champs à affichés pour un article de format link */
     $content .=’<h1>LIEN</h1>‘;
     return $content;
    }

    #972694
    didier07
    Participant
    Maître WordPress
    1965 contributions
    $format = get_post_format( $post_id );
    if ($format=’link’)  {add_filter(‘the_content’, ‘affic_site’);}

    Tu vas être obligé de le mettre dans la loop

    Ta fonction affic_site, elle peut aller dans ton functions.php ou dans ton plugin

    #972695
    Lumiere de Lune
    Participant
    Maître WordPress
    19385 contributions

    Tu es dans la boucle, puisque tu es dans un article
    Donc déjà tu supprimes ton global $post

15 sujets de 1 à 15 (sur un total de 20)
  • Vous devez être connecté pour répondre à ce sujet.