关于wordpress.org
对于我主页上的主循环,我想在顶部显示粘贴帖子但是我不希望帖子再次出现在循环中,否则对访问者来说似乎是多余的。
以下代码的问题是他们从顶部删除粘贴帖子 我想保留顶部的粘贴帖子 但是从循环中删除/排除它。这可能吗?
代码A:这会从顶部删除粘贴帖子
function mango($query){
if ( $query->is_home() && $query->is_main_query() && !is_admin() ) {
$query->set( 'ignore_sticky_posts', true );
}
}
add_action( 'pre_get_posts', 'mango' );
代码B:这将从顶部AND循环中移除粘性帖子
function mango($query){
if ( $query->is_home() && $query->is_main_query() && !is_admin() ) {
$query->set( 'post__not_in', get_option( 'sticky_posts' ) );
}
}
add_action( 'pre_get_posts', 'mango' );
答案 0 :(得分:0)
我认为你必须为此创建两个循环。一个用于粘贴帖子,一个用于常规帖子(但排除来自第二个循环的粘性帖子)。显然,您必须将此代码放入 index.php 。没有测试它,但我认为应该这样做......
<?php //we will get "Sticky Posts" only with this loop
$sticky = get_option( 'sticky_posts' );
$args = array(
/* Add whatever you need here - see http://codex.wordpress.org/Class_Reference/WP_Query */
'post__in' => $sticky,
);
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query( $args );
if ( $wp_query->have_posts() ) : ?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post();
if ( empty( $sticky ) ) break;
?>
<?php
$wp_query = null;
$wp_query = $temp;
wp_reset_query();
?>
<?php endwhile; ?>
<?php endif; ?><!--END if THE LOOP-->
<?php //Exlude stickies from second loop...
$sticky = get_option( 'sticky_posts' );
$args = array(
'post__not_in' => $sticky,
);
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query( $args );
if ( $wp_query->have_posts() ) : ?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
<?php endwhile; ?>
<?php endif; ?><!--END if THE LOOP-->
<?php
$wp_query = null;
$wp_query = $temp;
wp_reset_query();
?>