web-dev-qa-db-ja.com

ポストクエリ内のdo_shortcode

特定のカテゴリのブログ投稿を検索しています(テンプレートページのスラッグに従って、各投稿にスライダー、タイトル、およびコンテンツを出力させたい)。WordpressプラグインAnythingslider for Wordpressを使用しています。すべて自動化されてコピー&ペーストが少なくなるようにポストがずれる - しかしdo_shortcode行を追加すると、それぞれのポストを表示するのではなく、同じポストを(ポストの数だけ)複製します!

誰かアイデアがありますか?

    <?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

ループの外側で$post_slugを設定するので、値は変更されません。ループが進むにつれて順番に各投稿にリセットされるように、insideLoopをリセットする必要があります。

$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."]");
  }
}

しかし、変数を設定する必要はまったくありません。 $post->post_nameを使うだけです。

1
s_ha_dum