WordPress : WP Query fonctionne en dehors d’une fonction, pas à l’intérieur d’une fonction

Publié par Jean-Michel le

Solution : ce qui a fonctionné à la fin a été d’ajouter

  global $post;

en haut de la requête, donc avant

$custom_taxterms = ...

La boucle personnalisée Genesis de Bill Erickson est le modèle que j’ai finalement suivi.

Question originale

J’espérais de l’aide pour un problème qui me bloque.

J’ai la requête suivante. Il fonctionne et produit des données.

$custom_taxterms = wp_get_object_terms( $post->ID, 'region', array('fields' => 'ids') );
// arguments
$args = array(
    'post_type' => 'stay',
    'post_status' => 'publish',
    'posts_per_page' => 25, // you may edit this number
    'orderby' => 'rand',
    'tax_query' => array(
        array(
            'taxonomy' => 'region',
            'field' => 'id',
            'terms' => $custom_taxterms
        )
    ),
    'post__not_in' => array ($post->ID),
);
$related_items = new WP_Query( $args );
// loop over query
if ($related_items->have_posts()) :
    echo '<ul>';
    while ( $related_items->have_posts() ) : $related_items->the_post();
        ?>
        <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
        <?php
    endwhile;
    echo '</ul>';
endif;
// Reset Post Data
wp_reset_postdata();

Si je le mets maintenant dans une fonction, il cesse de fonctionner.

add_action( 'genesis_loop', 'related_posts_cpt' );
function related_posts_cpt (){
    // same loop as above
}

Juste pour être clair, si j’utilise la même fonction avec une sortie différente, cela fonctionne:

add_action( 'genesis_loop', 'related_posts_cpt' );
function related_posts_cpt() { 
    ?>
    <p>AAAAAAAAHHHHHH</p>
    <?php
}

Qu’est-ce que je rate? Merci en avance.

Solution n°1 trouvée

les fonctions renvoient une sortie. vous ne voulez pas simplement l’écho.

essayez ceci comme fonction:

function mycoolquery() {
    $custom_taxterms = wp_get_object_terms( $post->ID, 'region', array('fields' => 'ids') );
// arguments
    $args = array(
        'post_type' => 'stay',
        'post_status' => 'publish',
        'posts_per_page' => 25, // you may edit this number
        'orderby' => 'rand',
        'tax_query' => array(
            array(
                'taxonomy' => 'region',
                'field' => 'id',
                'terms' => $custom_taxterms
            )
         ),
        'post__not_in' => array ($post->ID),
    );
    $related_items = new WP_Query( $args );
// loop over query
    if ($related_items->have_posts()) :
       $output =  '<ul>';
       while ( $related_items->have_posts() ) : $related_items->the_post();

            $output .= '<li><a href="'.the_permalink().'">'.the_title().'</a></li>';

        endwhile;
        $output .= '</ul>';
    endif;
    // Reset Post Data
    wp_reset_postdata();
    return $output;
}

puis faites écho à la fonction où vous le souhaitez:

echo mycoolquery();

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *