我的所有帖子(标准WP帖子)都附带了一个名为“阅读时间”的自定义字段(不使用ACF)。基本上是一个函数计算每个帖子的阅读时间,并在该字段中输入一个数字。现在,我需要创建一个搜索表单,在这里,我可以使用3个选项中的一个进行筛选,并按日期、标题等对其进行排序。筛选应该类似于:“1-5分钟之间”、“5-10分钟之间”和“11及以上”。由于我的PHP技能不足以构建复杂的查询和数组,我四处搜索,发现了两篇文章。其中之一是this 另一个是this .
我有两个问题:a)如何查询所有帖子以检查阅读时间,并通过点击/选择选项过滤其中一个帖子?我写了一个基本的选择,如下面的一个,但不知道如何进一步做。”
<select name="readtimefilter">
<option value="5">0-5 Minutes</option>
<option value="10">6-10 Minutes</option>
<option value="11">11+ Minutes</option>
</select>
b)有人能解释第二个链接中给出的代码是如何工作的,因为我无法使用任何查询(如WP\\U查询)看到它吗?
非常感谢!
编辑(2017年10月18日):由于this answer. 我是这样做的。
if( isset( $_POST[\'readtimefilter\'] ) && $_POST[\'readtimefilter\'] ) {
$read_time = (int)$_POST[\'readtimefilter\'];
if ($read_time == 5) {
$args[\'meta_query\'][] = array(
\'key\' => \'post_read_time\',
\'value\' => $read_time+1,
\'type\' => \'numeric\',
\'compare\' => \'<\'
);
}
elseif ($read_time == 10) {
$args[\'meta_query\'][] = array(
\'key\' => \'post_read_time\',
\'value\' => array( 6, 11 ),
\'type\' => \'numeric\',
\'compare\' => \'between\'
);
}
else {
$args[\'meta_query\'][] = array(
\'key\' => \'post_read_time\',
\'value\' => $read_time,
\'type\' => \'numeric\',
\'compare\' => \'>\'
);
}
}
最合适的回答,由SO网友:WebElaine 整理而成
完整的、工作代码风格的答案在这里有点超出范围,但以下是对您的两个问题的一些建议:
自定义字段保存为Posteta。因此,您需要使用一个文本输入和GET方法设置一个简单的表单。在PHP中,要处理表单,请检查是否设置了$\\u GET变量。如果不是,则显示空表单。如果是,请使用WP\\u查询查找具有给定参数的所有帖子。这是一个excellent answer 这显示了如何在Posteta上进行大于或等于的比较。
第二个链接中的代码只在循环中起作用。在执行此代码时,主查询已经运行,因此它似乎只在已经从数据库中获取了许多帖子的存档上运行。