我使用函数array\\u slice在索引的循环中插入两个post。
function insert_post_wpse_96347($posts) {
global $wp_query;
$args = array(\'meta_key\' => \'Caja\', \'meta_value\' => array(\'UNO\',\'DOS\'), \'post__not_in\' => get_option("sticky_posts"), \'posts_per_page\' => \'2\',\'suppress_filters\'=>true);
if (is_main_query() && is_home() && 0 == get_query_var(\'paged\')) {
$p2insert = new WP_Query($args);
$insert_at = 0;
if (!empty($p2insert->posts)) {
array_splice($posts,$insert_at,0,$p2insert->posts);
}
}
return $posts;
}
add_filter(\'posts_results\',\'insert_post_wpse_96347\');
我还创建了一个插件来显示浏览量最大的帖子。此插件在添加上一个函数之前工作。
/* set view post */
function observePostViews($postID) {
$count_key = \'post_views_count\';
$count = get_post_meta($postID, $count_key, true);
if ($count==\'\') {
$count = 0;
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, \'0\');
} else {
$count++;
update_post_meta($postID, $count_key, $count);
}
}
我的插件只是小部件的一个副本
class-wp-widget-recent-posts.php 我只改变了
WP_Query
使用
\'meta_key\' => \'post_views_count\', \'orderby\' => \'meta_value_num\'
我如上所示创建的。
代替小部件,它显示的是两篇带有\'meta_key\' => \'box\', \'meta_value\' => array(\'ONE\',\'DOS\')
如何解决这一冲突?Array\\u splice,仅应用于循环,而不是全部查询我的主页
最合适的回答,由SO网友:Pieter Goosen 整理而成
您的代码非常混乱,这使得调试很困难,所以我对您的代码进行了一些清理。
这个posts_results
filter 接受两个参数,一个是posts结果数组,另一个是当前WP_Query
例子因此,您可以通过第二个参数,然后测试您的条件。
我没有测试您的代码,只是清理了它并添加了第二个参数。应该可以做到以下几点:(需要PHP 5.4+)
add_filter( \'posts_results\', \'insert_post_wpse_96347\', 10, 2 );
function insert_post_wpse_96347( $posts, \\WP_Query $q )
{
remove_filter( current_filter(), __FUNCTION__ );
if ( $q->is_main_query()
&& $q->is_home() &&
0 == get_query_var( \'paged\' )
) {
$args = [
\'meta_key\' => \'Caja\',
\'meta_value\' => [\'UNO\',\'DOS\'],
\'post__not_in\' => get_option( "sticky_posts" ),
\'posts_per_page\' => \'2\',
\'suppress_filters\' =>true
];
$p2insert = new WP_Query($args);
$insert_at = 0;
if ( !empty( $p2insert->posts ) ) {
array_splice( $posts, $insert_at, 0, $p2insert->posts );
}
}
return $posts;
}