这个\'the_posts\'
过滤器挂钩允许您编辑将在循环中显示的帖子。
它针对所有查询(主查询和辅助查询)启动,因此您需要检查所执行的查询是否正确。
也就是说,在您的情况下,您可以:
发送查询变量以个性化所选帖子的使用\'the_posts\'
筛选以在帖子数组的开头移动所选帖子。发送查询变量以个性化所选帖子应使用以下方式打印帖子缩略图:
<a href="<?php esc_url( add_query_arg( array(\'psel\' => get_the_ID() ) ) ) ?>">
<?php the_thumbnail() ?>
</a>
add_query_arg()
将查询变量添加到当前url,这意味着如果您位于包含该url的页面上
example.com/some/path/page/5
通过单击ID为44的帖子的帖子缩略图,您将被发送到url
example.com/some/path/page/5?psel=44
.
一旦url是相同的,显示的帖子将是相同的,但由于psel
url变量您可以对帖子重新排序,使所选帖子位于帖子数组的开头。
2。使用\'the_posts\'
筛选在帖子数组的开头移动所选帖子一旦在url变量中有了所选帖子id,将相关帖子对象放在帖子数组的顶部只需几个PHP函数即可
function get_selected_post_index() {
$selID = filter_input(INPUT_GET, \'psel\', FILTER_SANITIZE_NUMBER_INT);
if ($selID) {
global $wp_query;
return array_search($selID, wp_list_pluck($wp_query->posts, \'ID\'), true);
}
return false;
}
add_filter(\'the_posts\', function($posts, $wp_query) {
// nothing to do if not main query or there\'re no posts or no post is selected
if ($wp_query->is_main_query() && ! empty($posts) && ($i = get_selected_post_index())) {
$sel = $posts[$i]; // get selected post object
unset($posts[$i]); // remove it from posts array
array_unshift($posts, $sel); // put selected post to the beginning of the array
}
return $posts;
}, 99, 2);
前面的代码将确保帖子按您想要的顺序排列。
这个get_selected_post_index()
函数还可以在模板中使用,以了解是否有选定的帖子(并相应地修改模板),因为它返回false
未选择post时(或如果通过发送错误的Idpsel
url变量)。