在自定义页面模板中使用快捷代码的自定义循环

时间:2014-03-19 作者:Abhik

我试图在自定义页面模板中输出使用快捷码创建的自定义循环。下面是我用来生成短代码的代码:

function archive_sc( $atts ) {

    // Attributes
    extract( shortcode_atts(
        array(
            \'cat\' => \'\',
            \'number\' => 10,
        ), $atts )
    );

        $args = array( 
            \'post_type\' => \'smr-product\',
            \'smr-product-category\' => $cat, // \'taxonomy\' => \'term\',
            \'posts_per_page\' => $number,
        );
            // The Query
            $the_query = null;
            $the_query = new WP_Query( $args );

            // The Loop
            if ( $the_query->have_posts() ) {
                while ( $the_query->have_posts() ) {
                    smr_product_the_frontend_item();
                }
            } else {
                // no posts found
            }
            /* Restore original Post Data */
            wp_reset_postdata();
}
add_shortcode( \'pcats\', \'archive_sc\' );
下面是自定义页面模板中的代码:

<?php
/*
Template Name: Product Archive
*/

get_header();
?>
    <section id="content" class="review-container">
    <?php while ( have_posts() ) : the_post(); ?>
        <div id="list-items-review">
            <?php the_content(); ?>
        </div>
    <?php endwhile; ?>  
    </section>


<?php get_footer(); ?>
Thesmr_product_the_frontend_item() 只是每个产品的HTML的函数。

然而,它不知从何处返回了无限多的帖子(尽管该博客有大约20个产品)。我做错了什么?

1 个回复
SO网友:Musa Haidari

问题似乎出在Loop. 在循环内,您不会增加$the_query. 您可以按以下方式更改循环的代码:

// The Loop
if ( $the_query->have_posts() ) {
    while ( $the_query->have_posts() ) {
        $the_query->the_post();  // Add this line to fix the issue
        smr_product_the_frontend_item();
    }
} else {
    // no posts found
}

结束

相关推荐

Vimeo Froogaloop API,在小提琴中工作,但不能在WP中工作

我试图利用Vimeo的Froogaloop API,在用户单击某个元素时暂停视频嵌入。我让它在my Fiddle 但它在我的Wordpress环境中不起作用。我从this thread 创建我正在处理的网站的简化版本;HTML<div id=\"player1\" class=\"col\"> <div class=\"vid\"> <iframe src=\"//player.vimeo.com/video/75817361?titl