输出循环在一个页面上使用了两次短码

时间:2017-03-07 作者:ExcellentSP

下面的代码旨在简单地循环浏览帖子,给它们添加html格式的机会,然后将它们返回到短代码位置。我有条件逻辑,它根据传入的“类别”(术语)定义格式。我需要在同一页上输出两次,但我只看到在循环之外添加的代码。

add_shortcode(\'my_shortcode\',\'generate_my_shortcode_content\');
function generate_my_shortcode_content($atts){
    $a = shortcode_atts( array(
        \'post-count\' => 3,
        \'category\' => \'default-cat\'
    ), $atts );

    $post_count = (int)$a[\'post-count\'];

    $post_category = explode(\',\', $a[\'category\']);

    $args = array(
        \'post_type\' => \'my-type\',
        \'posts_per_page\' => $post_count,
        \'tax_query\' => array(
            array(
                \'taxonomy\' => \'my-taxonomy\',
                \'field\'    => \'slug\',
                \'terms\'    => $post_category
            )
        )
    );

    $test = "<h1>";

    $query = new WP_Query( $args );
    if($query->have_posts()):while($query->have_posts()):$query->the_post();

        $post_id = get_the_ID();
        $post_title = get_the_title($post_id);
        $post_content = get_the_content($post_id);

        $posts .= $post_id . $post_title . $post_content;
        $test .= "this is a test";

    endwhile;wp_reset_postdata();endif;

    $test .= "</h1>";
    return $posts . $test;
}
此函数将返回{Post ID}{Post Title}{Post Content}<h1>this is a test</h1> 第一次执行时,但只会返回<h1></h1> 在第二个。为什么会这样?

2 个回复
SO网友:CK MacLeod

我不知道你在用你的短代码做什么,但我认为你需要运行rewind\\u posts()来将循环计数器移回开始,以便第二次“执行”示例如下:https://codex.wordpress.org/Function_Reference/rewind_posts

进一步解释如下:https://stackoverflow.com/questions/23729847/wordpress-difference-between-rewind-posts-wp-reset-postdata-and-wp-reset-q

SO网友:Ben Casey

尽量不要与全球$post WP\\U查询不需要调用the_post() 在柱子上打圈。

$query = new WP_Query( $args );
if( $query->have_posts() ):

    foreach( $query->posts as $post ):

        $post_id = $post->ID
        $post_title = get_the_title($post_id);
        $post_content = get_the_content($post_id);

        $posts .= $post_id . $post_title . $post_content;
        $test .= "this is a test";

    endforeach;

endif;

相关推荐

Generating a perfect loop

所以我现在已经在这里坐了大约三个小时了,我不得不让这件事过去几个小时来好好睡一觉,同时我希望能得到你的帮助。我已经能够使用$wpdb->get\\u results从数据库中获取内容,并且能够将它们放入一个数组中,但是我想使用这些信息在循环中运行一个新的查询,以获取列表中的多个项目。我使用了本指南的一个变体https://stackoverflow.com/questions/45848249/woocommerce-get-all-orders-for-a-product 获取订单ID。现在,我已