出于某种奇怪的原因,这段代码在我本地安装的Wordpress上运行得非常完美,但当我将其放到web服务器上时,代码只是一次又一次地重复相同的两篇文章,并且没有超出相同的两篇文章。我使用的是InfiniteScroll(不是WP插件,而是我手动安装的)。我的循环有什么问题吗?
EDIT
下面是从single中完整获取的代码链接。php:
http://pastebin.com/dtiSHUYP<div id="post-wrap">
<?php // Show all posts within this category
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$args= array(
\'category_name\' => $cat->slug,
\'paged\' => $paged,
\'cat\' => \'-12\',
\'posts_per_page\' => 2,
\'post__not_in\' => array( $post->ID )
);
query_posts($args); ?>
<?php $current_post_date = $post->post_date; ?>
<?php if( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php if ($post->post_date < $current_post_date) { ?>
<article>
<figure>
<?php
$image_link=get_post_meta($post->ID,\'Image_Link\',true);
if($image_link != \'\') {
echo \'<a href="http://example.com">\'. get_the_post_thumbnail() .\'</a>\';
} else {
echo get_the_post_thumbnail();
}
?>
<figcaption>
<?php
// Call in the contents of a custom field called Credit and if custom field in admin panel is empty don\'t display <p> tags otherwise wrap contents of custom field in <p> tags
$credit=get_post_meta($post->ID,\'Credit\',true);
if($credit != \'\') {
echo \'<p>\'. $credit .\'</p>\';
} else {
echo \' \';
}
?>
</figcaption>
</figure>
<?php
$sub_title=get_post_meta($post->ID,\'subtitle\',true);
if($sub_title != \'\') {
echo \'<h1>\'. get_the_title() .\'<span> / \'. $sub_title . \' / \' . get_the_time(\'l jS F\') .\'</span></h1>\';
} else {
echo \'<h1>\'. get_the_title() .\'<span> / \' . get_the_time(\'l jS F\') .\'</span></h1>\';
}
?>
<?php the_content(\'\'); ?>
<div class="a-options">
<a href="#post-<?php the_ID(); ?>" class="comments scrollto">Comment</a>
<!-- share -->
<div class="share-button">
<div class="buttons">
<div class="facebook">
<div class="fb-like" data-send="false" data-layout="button_count" data-width="450" data-show-faces="false" data-font="arial"></div>
</div>
<div class="twitter">
<a href="https://twitter.com/share" class="twitter-share-button" data-text="<?php the_title(); ?>" data-url="<?php the_permalink(); ?>" data-via="kettlesyard" data-related="kettlesyard" data-hashtags="kettlesyard">Tweet</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
</div>
<div class="pinterest">
<a href="http://pinterest.com/pin/create/button/?url=<?php the_permalink(); ?>" class="pin-it-button" count-layout="horizontal"><img border="0" src="//assets.pinterest.com/images/PinExt.png" title="Pin It" /></a>
</div>
</div>
<span class="pseudo-button">+ Share</span>
</div> <!--! /share -->
</div><!--! /a-options -->
<?php if ( in_category( \'contact\' ) ) : // Display nothing ?>
<?php // Else, show comments
else : ?>
<?php global $withcomments;
$withcomments = 1;
comments_template(); ?>
<?php endif; ?>
</article>
<?php } ?>
<?php endwhile; ?>
<div id="next-prev-wrap" class="nextprev"><?php next_posts_link(); ?> <?php previous_posts_link(); ?></div>
<?php endif; wp_reset_query(); ?>
</div>
SO网友:EAMann
你的第一个问题是query_posts
. 该函数不用于创建对数据库的新查询;相反,它用于修改现有的全局查询。
读取here 和here 有关您可以使用什么的更多信息。
其次,模板中有一些奇怪的代码,老实说,这些代码本来就不应该工作。该行:
$args= array(
\'category_name\' => $cat->slug,
\'paged\' => $paged,
\'cat\' => \'-12\',
\'posts_per_page\' => 2,
\'post__not_in\' => array( $post->ID )
);
。。。正在引用代码中其他地方未看到的变量。即
$cat
和
$post
. 你引用的事实
$post
告诉我你要么在页面的更高位置有其他查询,要么在另一个循环中。。。在任何一种情况下
query_posts()
肯定会受伤的。
此外,本地安装和网络安装之间的细微差异也可能起到一定作用。如果您在两个系统中使用的WP、PHP、MySQL等版本不完全相同,那么可能会出现这种奇怪的差异。