首先,概述我正在努力实现的目标。我正在建立一个资源中心,列出各种自定义帖子类型,由于FacetWP,它可以过滤/搜索。在此资产清单中,我插入一个;促销活动“;每第6个位置的post类型,因此是自定义查询,即:
add_filter(\'facetwp_query_args\', function ($query_args, $class) {
if (\'resource_library_parent\' == $class->ajax_params[\'template\']) {
// promos query
$promos = get_posts(array(
\'posts_per_page\' => -1,
\'post_type\' => \'promo\',
\'facetwp\' => false,
\'orderby\' => \'menu_order\'
));
// assets query
$assets = get_posts(array(
\'posts_per_page\' => -1,
\'post_type\' => array(\'report\', \'ebook\', \'whitepaper\', \'casestudy\', \'webinar\', \'tool\', \'infographic\'),
\'post_status\' => \'publish\',
\'has_password\' => false,
\'facetwp\' => false,
\'orderby\' => \'date\',
\'tax_query\' => array(array(
\'taxonomy\' => \'tag\',
\'field\' => \'slug\',
\'terms\' => \'hide-me\',
\'operator\' => \'NOT IN\'
))
));
$x = 6;
foreach ($assets as $num => $asset) {
if (($num + 1) % $x == 0) {
if (isset($promos[($num + 1) / $x - 1])) {
array_splice($assets, $num, 0, array($promos[($num + 1) / $x - 1]));
}
}
}
foreach ($assets as $asset) {
$posts_id[] = $asset->ID;
}
$query_args[\'post_type\'] = array(\'report\', \'ebook\', \'whitepaper\', \'casestudy\', \'webinar\', \'tool\', \'infographic\', \'promo\');
$query_args[\'post__in\'] = $posts_id;
$query_args[\'orderby\'] = \'post__in\';
$query_args[\'posts_per_page\'] = 12;
}
return $query_args;
}, 10, 2);
这在页面加载时非常有效。
但是单击分页(使用寻呼机方面类型)会导致第二页的结果缺少下一页;促销活动“;位置18。刷新第二页会导致促销显示在正确的位置,即总数的第6或18位。单击返回到第一页,将显示全部3“;促销活动“;在显示帖子时,再次刷新可以修复排序。
这让我左右为难,毫无疑问,这与寻呼机或我在错误的地方更改查询有关,但任何提示或想法都是非常受欢迎的。
您可以在此处看到此操作的演示:https://staging-xucobuce.kinsta.cloud/resource-center