如何使用下拉菜单按自定义字段过滤帖子

时间:2017-10-16 作者:Pradeep

我的所有帖子(标准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\' => \'>\'
    );
  }
}

1 个回复
最合适的回答,由SO网友:WebElaine 整理而成

完整的、工作代码风格的答案在这里有点超出范围,但以下是对您的两个问题的一些建议:

自定义字段保存为Posteta。因此,您需要使用一个文本输入和GET方法设置一个简单的表单。在PHP中,要处理表单,请检查是否设置了$\\u GET变量。如果不是,则显示空表单。如果是,请使用WP\\u查询查找具有给定参数的所有帖子。这是一个excellent answer 这显示了如何在Posteta上进行大于或等于的比较。

第二个链接中的代码只在循环中起作用。在执行此代码时,主查询已经运行,因此它似乎只在已经从数据库中获取了许多帖子的存档上运行。

结束

相关推荐

在AJAX POST到其他PHP文件后定义(‘ABSPATH’)FALSE

我是Wordpress的新手,所以请温柔一点。我成功创建了管理子菜单页。子菜单页本身应该显示“wp admin/whatever/myFolder”中的文件列表,并附有按钮,它确实可以显示这些文件。下面是一个按钮示例:<li>$file</li><input type=\'button\' value=\'choose\' data-filename=\'$file\' data-path=\'$fullPath\' name=\'choose\' /> I$