2

私は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; ?>

ここで、2 番目のループで $exclude_featured を使用して、その投稿をそのループから除外する必要があります。いくつかの実装を試しましたが、どれもうまくいきませんでした。2番目のループの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 );

..そして運がなかった。これら 2 つのスニペットのいずれかを使用すると、表示する投稿の数を設定する pre_get_posts 関数も役に立たなくなることに気付きました。

どんな助けでもいただければ幸いです

編集:

while2番目のループのステートメントの前に次の行を追加しようとしました..

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]: 無効な引数が /home/myuser/public_html/mysitedirectory/wp-includes/query.php 行 2162 に渡されました

4

1 に答える 1

1

You could substitute your last three lines with these:

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

the_title();
endwhile;
?>

continue is used within looping structures to skip the rest of the current loop iteration and continue execution at the condition evaluation and then the beginning of the next iteration.

This will, however, result in that you're having one less post to display. If you'd like to keep your post count exactly the same, you would need to exclude the post in the query. The query in the question is pretty close to being correct, but post__not_in has to be an array, and not an integer. All you need to do is wrap your $exclude_featured in an array, and your query should work.

Your query should look like this:

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 に答える