是否仅搜索具有特定元数据的帖子?

时间:2018-10-31 作者:joq3

我有一个自定义的帖子类型,可以创建事件。这些事件有开始日期和结束日期。我希望能够搜索仅在特定日期发生的事件。因此,如果开始日期为2018-10-25,结束日期为2018-11-01,则会显示在搜索中,如果开始日期为2018-10-20,结束日期为2018-10-22,则不会显示。未来事件也是如此。

如何做到这一点?帖子本身在元数据中有开始日期和结束日期。但我不知道如何使用它来修改搜索表单。

目前我使用的是标准搜索表单:

<?php get_search_form(); ?>

1 个回复
SO网友:jdp

快速提问。。。哪种情况适用?

如果您只需要查询两段元数据之间的今天的日期,我会创建一个小部件,运行一个相当直接的WP\\u查询并输出帖子。

如果您要求用户输入要搜索的日期,我可能仍然会使用小部件,但会使用jQuery UI日期选择器方法,以获得更好的用户界面和数据完整性。

无论怎样,我都不会改变股票搜索表单的用途(它只是一个小部件)。

好啊如果是选项1,请尝试此。。。在函数文件中构建小部件。

class my_events_widget extends WP_Widget {
    //custom properties
    public $base_id = \'my_events\';
    public $title = \'My Events Title\';
    public $description = "Today’s Events";
    //end
    function __construct(){
        parent::__construct($this->base_id,$this->title,[\'description\'=>$this->description]);
    }
    public function widget($args, $instance) {
        $str = \'<div class="widget"><h2>\'.$this->description.\'</h2><ul>\';
        $q = new WP_Query([
            \'post_type\'=>\'events\',
            \'meta_query\'=>[
                \'relation\'=>\'AND\',
            [
                \'key\'=>\'start_date\',
                \'value\'=>date(\'Y-m-d\'),
                \'type\'=>\'DATE\',
                \'compare\'=>\'<=\'
                ],
            [
                \'key\'=>\'end_date\',
                \'value\'=>date(\'Y-m-d\'),
                \'type\'=>\'DATE\',
                \'compare\'=>\'>=\'
            ]]
        ]);
        if ($posts = $q->get_posts()) {
            foreach ($posts as $post) {
                $str .= sprintf(\'<li><a href="%s">%s - %s</a></li>\', esc_attr(get_permalink($post)), $post->post_title, get_the_date(\'M j, Y\', $post));
            }
        } else $str .= "<li>Nothing posted currently. Please check back.</li>";
        $str .= \'</ul></div>\';
        echo $str;
    }
}
现在在主题的函数文件中注册小部件。

function my_custom_widgets() {
  register_widget(\'my_events_widget\');
}
add_action(\'widgets_init\',\'my_custom_widgets\');
您可以将小部件放在侧栏中,或将其用作页面/帖子中的模板标记,使用the_widget() function.

可能需要稍微调整一下WP\\u查询,因为我无法完全测试它,但它应该可以完成工作。

结束

相关推荐

Bash和PHP exec()中WP-CLI的不同输出

我已安装this package 在WP-CLI上。当我跑步时wp login create 在里面bash 它工作得很好,但是当我跑步的时候exec(\"wp login create\") 在PHP脚本中WP-CLI 返回此错误:错误:“login”不是已注册的wp命令。有关可用命令,请参阅“wp帮助”。你是说“插件”吗?我从中检查了用户exec(\"whoami\") 这是一样的。我怎样才能找到问题?EDIT当我跑步时wp package list 在PHP中,它返回:错误:Composer目录“/