web-dev-qa-db-fra.com

do_shortcode dans la requête post

J'interroge les articles de blog avec une catégorie spécifique (en fonction du slug de page de modèle et souhaite que chaque article affiche un curseur, un titre et un contenu. J'utilise le plugin wordpress Anythingslider pour Wordpress. Je crée des diapositives avec la même catégorie que le message slugs de sorte que tout soit automatisé et moins copié-collé - toutefois, lorsque j'ajoute la ligne do_shortcode, il duplique le même message (autant de fois qu'il y a de messages), au lieu d'afficher CHAQUE message!

Quelqu'un a des idées?

    <?php   
$args = array(
    'post_type' => 'post',
    'category_name' => $post->post_name,
    'showposts' => 20, 
);

$the_query = new WP_Query( $args ); 

$page_id = get_the_ID();
$page_object = get_page( $page_id ); ?>

<div class="project-column">
    <h4><?php echo $page_object->post_content; ?></h4>
    <h1>Title</h1>

    <div id="navigation">
        <?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

    <a href="#<?php echo $post->post_name; ?>"><?php the_title(); ?></a>

        <?php endwhile; wp_reset_postdata(); ?>
        <?php endif; ?>
    </div>
</div>



    <?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<div id="<?php echo $post->post_name; ?>"></div>
<div class="entry-container">

    <div class="slider-container">
        <?php $shortcode = do_shortcode('[anything_slides cat='.$post->post_name.']');
            echo apply_filters('my_new_filter',$shortcode); ?>
    </div>

    <div class="project-column">
        <h2><?php the_title(); ?></h2>
        <?php echo the_content(); ?>            
        <hr>
    </div>
</div>

<?php endwhile; wp_reset_postdata(); ?>
<?php endif; ?> 
1
TechyDude

Vous définissez $post_slug en dehors de la boucle, de sorte que la valeur ne change jamais. Vous devez réinitialiser l'intérieur de la boucle pour qu'il soit réinitialisé à chaque publication à mesure que la boucle progresse.

$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) { 
  while ( $the_query->have_posts() ) { 
    $the_query->the_post(); 
    $post_slug = $post->post_name;
    echo do_shortcode("[anything_slides cat=".$post_slug."]");
  }
}

Mais il n'y a vraiment pas besoin de définir la variable du tout. Il suffit d'utiliser $post->post_name.

1
s_ha_dum