按自定义日期范围输入过滤 wordpress 帖子

Posted

技术标签:

【中文标题】按自定义日期范围输入过滤 wordpress 帖子【英文标题】:Filter wordpress posts by custom date range input 【发布时间】:2016-05-24 09:50:06 【问题描述】:

我有一个自定义帖子类型“课程”,并且附加了一个自定义字段,称为“课程日期”。日期范围和查询工作正常,但是我需要允许用户自己输入日期范围,然后更新列表(例如本月或本周)并且似乎无法弄清楚如何允许他们输入日期,然后用这个更新查询。供参考,来自taxonomy-subject.php的查询:

$args = array(

       'meta_key' => 'date_of_lesson', // The meta key to sort on
       'orderby' => 'meta_value',
       'order' => 'ASC',
       'posts_per_page' => -1,
       'meta_query' => array(
    array(
        'key' => 'date_of_lesson',
        'value' => array($startdate, $enddate),
        'compare' => 'BETWEEN',
        'type' => 'DATE'
    )
)

非常感谢您的帮助。

【问题讨论】:

是我遗漏了什么,还是您在问如何用两个日期选择器制作一个表单? 我正在努力接受他们的输入和更新查询,比如我正在查看“主题”税收页面,其中包含 2015 年的所有帖子,并且用户希望将其缩小为一个一个月,然后可能再过一个月,我不知道如何更新查询以缩小范围,可能是我心胸狭窄,但不管我被卡住了 您能否提供更多代码并详细说明“他们的输入” - 向我们展示您获得/拥有的内容,我们可以帮助您以正确的格式获取它以供您查询工作。您给我们的越多,您得到的回报就越多:) 因此,如果您使用表单从用户那里获取日期,请向我们展示该表单。 对不起,这不是最好的,基本上,尝试了一个带有两个输入的开始和结束日期的 html 表单(不会显示代码,因为它只是一个表单),尝试在“提交”时这样做' 被按下,帖子将更新,仅显示日期范围内的帖子。不知道如何在初始页面加载等之后更改查询,就像我说的那样,我对此并不真正“好”,除了如果我在循环之前将日期应用于变量,查询第一次工作正常.感谢您的帮助。 您需要将表单保留在页面上,并确保日期字段保留提交的值(value="" 等),然后用户可以调整日期并再次提交。希望这就是你的意思。该页面将再次重新加载,因为您必须再次调用查询代码。因此,每次您/他们更改页面必须再次加载的日期时。除非你使用 ajax 但那是完全不同的鱼:) 【参考方案1】:

基本上,您需要在页面上设置一个表单,以显示您的数据以及您的开始日期和结束日期,使用 jQuery 日期选择器之类的工具可以让生活更轻松,并将它们保留在一个字段中。

提交时,获取值并检查它们的格式,并确保它是 YYYY-MM-DD,符合 https://codex.wordpress.org/Class_Reference/WP_Meta_Query。如果您的日期格式不正确,您可能需要使用http://php.net/manual/en/function.strtotime.php,然后使用http://php.net/manual/en/function.date.php。

当表单发布时,请务必在表单中保留发布的日期值(value="" 等...),以便用户可以轻松调整他们正在查看的内容,然后再次提交表单以使任何调整。

【讨论】:

【参考方案2】:

您只需将用户提供的日期转换为 strtotime 格式,然后将其更改为 'yyyy-mm-dd '(2016-05-24) 格式并传入此查询。如果此格式未通过,则查询将返回空结果。

用户选择的输入应按照以下格式更改为开始日期和结束日期。

$start = '2011-11-31';
$end = '2011-10-01';
$args = array(
    'post_type' => 'YOUR-POST-TYPE',
    'posts_per_page' => -1,
    'orderby' => 'meta_value',
    'order' => 'ASC',
    'meta_key' => 'date_of_lesson',
    'meta_query' => array(
        array(
            'key' => 'date_of_lesson',
            'value' => array($start, $end),
            'compare' => 'BETWEEN',
            'type' => 'DATE'
        )
    )
);
// Make the query
$events_query = new WP_query();
$events_query->query($args);

【讨论】:

感谢您的回复,如上所述,问题不在于查询的实际使用,它的工作方式与您给出的相同,它是如何使用用户的输入更新查询(来自两个 Jquery 日期选择器或通过两个格式正确的 HTML 输入框)? 将我的回复标记为有用兄弟。因为根据您的问题,我的回答是正确的。 我确实说过我在努力使用他们的输入,而不是查询,或者是每次他们输入日期并将新输入保存到变量时,页面将更新为新的自动从查询中发布? 嗨,兄弟,您能否解释一下您在问题中提到的含义:“但是我需要允许用户自己输入日期范围,然后更新列表(例如本月或本周),似乎无法弄清楚如何让他们输入日期,然后用这个更新查询。” - 你问过如何输入日期和更新查询..

以上是关于按自定义日期范围输入过滤 wordpress 帖子的主要内容,如果未能解决你的问题,请参考以下文章

在 Django admin 中按自定义日期范围过滤

按自定义字段过滤帖子 - url 正确更新但过滤不起作用

如何在 Wordpress API v2 中过滤特定日期之后修改的帖子

通过自定义日期字段的 Wordpress 自定义存档页面链接

php 按自定义帖子类型获取帖子列表

查询自定义帖子类型并按自定义帖子类型排序