自定义WP_QUERY不能正常工作

时间:2014-07-10 作者:Chris

好啊

因此,我创建了一个自定义WP\\u查询,该查询获取post\\u类型post 并将其输出为样式化列表。它工作得很好,输出了样式化的列表,但在它下面再次显示所有帖子,但格式完全不同(未设置样式)。

<?php

// get all post types
$args = array (
    \'post_type\'              => \'post\',
    \'post_status\'            => \'publish\',
    \'pagination\'             => true,
    \'paged\'                  => (get_query_var(\'paged\') ? get_query_var(\'paged\') : 1),
    \'posts_per_page\'         => 20,
    \'order\'                  => \'ASC\',
    \'orderby\'                => \'date\',
); ?>
<?php $wp_query = new WP_Query($args); ?>

<?php if ($wp_query->have_posts()): ?>
    <?php while($wp_query->have_posts()): $wp_query->the_post() ?>
        <div class="row">
            <div class="col-md-5">
                <a href="<?php the_permalink() ?>" class="fancybox">
                    <?php the_post_thumbnail(\'medium\'); ?>
                </a>
            </div>
            <div class="col-md-7">

                <!-- title and the excerpt -->
                <h5><?php the_title() ?></h5>
                <?php the_excerpt() ?>

                <!-- post buttons -->
                <a href="<?php the_permalink() ?>" class="btn btn-primary">View full story</a>
                <?php if(get_field(\'comments_enable\') !== false): ?>
                    <a href="<?php the_permalink() ?>#disqus_thread" class="btn btn-default"> Comments</a>
                <?php endif; ?>

            </div>
        </div>

        <hr style="margin: 10px 0; border-style: dotted; border-color: #333" class="row">

    <?php endwhile; ?>

    <!-- row -->
    <div class="row">
        <div class="col-xs-6">
            <?php previous_posts_link(\'<i class="fa fa-arrow-left"></i> <span class="text">Previous page</span>\'); ?>
        </div>
        <div class="col-xs-6 text-right">
            <?php next_posts_link(\'<span class="text">Next page</span> <i class="fa fa-arrow-right"></i>\'); ?>
        </div>

    </div>

<?php else: ?>

    <p class="text-muted">No news right now, please check back later.</p>

<?php endif; unset($wp_query); wp_reset_postdata(); ?>
这是一个模板部分,使用get_template_part() 方法如果我将WP\\u查询分配给$wp_query 它不能折叠,但我需要它$wp_query 使分页链接正常工作。我也很不安$wp_query 以及在循环结束时重置post数据。我很困惑,希望你能帮助我!

2 个回复
最合适的回答,由SO网友:Milo 整理而成

使用wp_reset_query() 还原原始查询。这也要求wp_reset_postdata, 所以你可以把它换掉。

SO网友:Pieter Goosen

这是个人喜好,但我真的不喜欢使用$wp_query 使事情复杂化。有两种方法可以解决此问题,一种是使用temp变量$wp_query 第二,更改变量的名称并修复分页,这也是我推荐的个人偏好

METHOD 1

正如我所说,您可以为$wp_query 并取消设置

<?php

// get all post types
$args = array (
    \'post_type\'              => \'post\',
    \'post_status\'            => \'publish\',
    \'pagination\'             => true,
    \'paged\'                  => (get_query_var(\'paged\') ? get_query_var(\'paged\') : 1),
    \'posts_per_page\'         => 20,
    \'order\'                  => \'ASC\',
    \'orderby\'                => \'date\',
);
$temp = $wp_query; 
  $wp_query = null; 
  $wp_query = new WP_Query(); 
  $wp_query->query( $args );

<--- YOUR LOOP ETC--->

$wp_query = null; 
  $wp_query = $temp;  // Reset

METHOD 2

这是我喜欢的方法。为变量指定唯一的名称,例如,$my_query 和中的正确分页next_posts_link. 这就是您的自定义查询现在的外观。(Note 无需滥用php标记。如果您不是从php切换到html,也不是从visa切换到html,那么您不必像以前那样打开和关闭每个元素的php标记。检查下面的我的代码)

<?php

// get all post types
$args = array (
    \'post_type\'              => \'post\',
    \'post_status\'            => \'publish\',
    \'pagination\'             => true,
    \'paged\'                  => (get_query_var(\'paged\') ? get_query_var(\'paged\') : 1),
    \'posts_per_page\'         => 20,
    \'order\'                  => \'ASC\',
    \'orderby\'                => \'date\',
); 

$my_query = new WP_Query($args); 

if ($my_query->have_posts()): 
    while($my_query->have_posts()): $my_query->the_post() ?>

<---YOUR LOOP ETC--->
好的,这会弄乱分页。要解决此问题,您需要设置$max_pages 中的参数next_posts_link, 所以你的next_posts_link 看起来像这样

<?php previous_posts_link(\'<i class="fa fa-arrow-left"></i> <span class="text">Previous page</span>\', $my_query->max_num_pages); ?>
这将解决分页问题

结束

相关推荐

Get_Posts()强制忽略主循环上的粘滞帖子

我有一个自定义查询,使用get_posts() 除了忽略其主查询上的粘性之外,还忽略了主循环上的粘性帖子。四处阅读我发现get_posts() sticky有一些问题,但无法找到满足我需求的解决方案。粘滞柱通常显示,但不在顶部,这是意外的。如何使其正常工作?我使用的参数:\'numberposts\' => 5, \'category_name\' => \'\', \'post_status\' => \'publish\',