Php 在帖子列表的顶部只显示一个粘性帖子

Php 在帖子列表的顶部只显示一个粘性帖子,php,wordpress,wordpress-theming,Php,Wordpress,Wordpress Theming,在我的主页上,我有一个帖子列表,在顶部我只想显示最新的“粘性”帖子,然后是其余的帖子。有没有办法做到这一点 只使用一个的奖励积分 (我知道如何使用两个query_posts(),但我正在寻找一个更省力的解决方案。)您需要稍微调整一下这段代码,但它应该会让您朝着正确的方向前进。这样做的目的是修改用于获取帖子的sql查询 在您的查询之前_posts();添加以下代码: function selectSticky( $sql ){ global $sticky_posts, $wpdb;

在我的主页上,我有一个帖子列表,在顶部我只想显示最新的“粘性”帖子,然后是其余的帖子。有没有办法做到这一点

只使用一个的奖励积分


(我知道如何使用两个
query_posts()
,但我正在寻找一个更省力的解决方案。)

您需要稍微调整一下这段代码,但它应该会让您朝着正确的方向前进。这样做的目的是修改用于获取帖子的sql查询

在您的查询之前_posts();添加以下代码:

function selectSticky( $sql ){
    global $sticky_posts, $wpdb;

    $sticky_posts = get_option( 'sticky_posts' );
    $sticky_posts = implode( ', ', $sticky_posts );

    return "IF( {$wpdb->posts}.ID IN ( $sticky_posts ), 2, 1 ) as sticky, ".$sql;
}

function whereSticky( $sql ){
    global $sticky_posts, $wpdb;

    $sql .= " OR {$wpdb->posts}.ID IN ( $sticky_posts )";
    return $sql;
}

function orderSticky( $sql ){
     $sql = "sticky DESC, ".$sql;
     return $sql;
}

// just for checking sql, you can remove this once everything works
function requestSticky( $sql ){
     echo $sql."<br/><br/>";
     return $sql;
}

add_action( 'posts_fields', 'selectSticky' );
add_action( 'posts_where', 'whereSticky' );
add_action( 'posts_orderby', 'orderSticky' );
add_action( 'posts_request', 'requestSticky' );
函数selectSticky($sql){
全球$sticky_posts,$wpdb;
$sticky_posts=get_选项(“sticky_posts”);
$sticky_posts=内爆(“,”,$sticky_posts);
返回($sticky_posts)中的IF({$wpdb->posts}.ID),2,1)作为sticky,“.$sql;
}
函数($sql){
全球$sticky_posts,$wpdb;
$sql.=“或($sticky_posts)”中的{$wpdb->posts}.ID”;
返回$sql;
}
函数orderstick($sql){
$sql=“sticky DESC,”.$sql;
返回$sql;
}
//为了检查sql,您可以在一切正常后删除它
函数requestSticky($sql){
echo$sql。“

”; 返回$sql; } 添加操作('posts\u fields','selectSticky'); 添加_操作('posts_where','whereSticky'); 添加_操作('posts_orderby','orderSticky'); 添加_操作('posts_request','requestSticky');
您尝试过任何插件吗?比如这个?我可能更容易使用/修改它们。

谢谢您的回复!哇,我没想到会有这么简单的事情涉及到这么多的代码!这也让我想知道为什么WP核心团队不只是在
WP_posts
表中添加一个“sticky”列……如果您知道将返回正确结果的sql查询,您可以跳过前三个操作/函数,只在requestSticky()中返回查询。虽然我一时想不起来,但我只能想象使用联合查询解决多个粘性问题的方法,这并不能真正节省sql方面的开销,尽管这对PHP来说会更少。问题是,一旦我选中另一篇文章的“粘性”选项,我的列表顶部就会有两篇粘性文章,随着我继续添加新的“粘性”帖子,这些帖子将继续增长。我只想显示一个粘性帖子。谢谢,Umut,但我不想使用重复WP核心中已有功能的插件。