2

我有一个 wordpress 页面,它有两个这样的循环......

<?php 
global $post;
$args = array(
    'showposts'        => 1,
    'category_name'    => 'videos',
    'meta_key'         => 'feature-image',
);

$myposts = get_posts($args);  
foreach( $myposts as $post ) :  setup_postdata($post);
$exclude_featured = $post->ID;
?>
<span class="featured">
<?php the_title(); ?>
</span>
<?php endforeach; ?>

<?php while ( have_posts() ) : the_post(); ?>
<?php the_title(); ?>
<?php endwhile; ?>

现在我需要在我的第二个循环中使用 $exclude_featured 一些如何从该循环中排除该帖子。我已经尝试了一些实现,但都没有奏效。我已尝试在第二个循环的 while 语句上方添加以下内容...

global $query_string;
query_posts( $query_string . '&exclude='.$exclude_featured );

还有这个...

global $wp_query;
$args = array_merge( $wp_query->query_vars, array( 'exclude' => $exclude_featured ) );
query_posts( $args );

..并没有运气。我注意到,通过使用这两个片段中的任何一个,它们还会渲染我的 pre_get_posts 函数,该函数将帖子的数量设置为无用。

任何帮助,将不胜感激

编辑:

我尝试while在第二个循环的语句之前添加以下行。

global $wp_query;
$args = array_merge( $wp_query->query_vars, array( 'post__not_in' => $exclude_featured ) );
query_posts( $args );

但是我仍然没有任何成功,它带来了以下错误:

警告:array_map() [function.array-map]:参数 #2 应该是第 2162 行 /home/myuser/public_html/mysitedirectory/wp-includes/query.php 中的一个数组

警告:implode() [function.implode]:在第 2162 行的 /home/myuser/public_html/mysitedirectory/wp-includes/query.php 中传递的参数无效

4

1 回答 1

1

你可以用这些替换你的最后三行:

<?php
while ( have_posts() ) : the_post();
if ( $exclude_featured == get_the_ID() )
    continue;

the_title();
endwhile;
?>

continue用于循环结构中以跳过当前循环迭代的其余部分并在条件评估处继续执行,然后开始下一次迭代。

但是,这将导致您显示的帖子减少。如果您想保持帖子数量完全相同,则需要在查询中排除帖子。问题中的查询非常接近正确,但 post__not_in 必须是数组,而不是整数。您需要做的就是将您的数组包装$exclude_featured在一个数组中,您的查询应该可以工作。

您的查询应如下所示:

global $wp_query;
$args = array_merge(
    $wp_query->query_vars,
    array(
        'post__not_in' => array(
            $exclude_featured
        )
    )
);
query_posts( $args );
于 2012-09-22T01:48:36.213 回答