WP_QUERY:获取存在自定义字段的帖子

时间:2020-09-10 作者:Michael

我正在尝试获取所有具有名为webinar, 但我只是得到了所有的帖子。以下是我所拥有的:

    $args = array(
        \'showposts\' => -1,
        \'post_type\' => \'post\',
        \'meta_query\' => array(
            \'key\'     => \'webinar\',
            \'compare\' => \'EXIST\',
        ),
     );

    $loop = new WP_Query($args);
    if($loop->have_posts()) {
        
        while ( $loop->have_posts() ) {
            $loop->the_post();
            $output .= get_the_title();
        }

    }

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

不是这样的meta_query 作品the documentation at WordPress.org states that meta_query does not take parameters, but rather arrays of parameters

meta\\u查询还包含一个或多个具有以下键的数组:

然后再往下:

Important Note: meta_query 获取一个元查询参数数组(它获取一个数组)-您可以在下面的示例中看到这一点。

此构造允许您通过使用第一个(外部)数组中的关系参数来描述元查询之间的布尔关系来查询多个元数据。接受的参数为“AND”、“OR”。默认值为“AND”。

以及:

(请注意,即使只有一个查询,meta\\u查询也需要嵌套数组。)

因此:

        \'meta_query\' => [
            \'key\'     => \'webinar\',
            \'compare\' => \'EXIST\',
        ],
应该是这样的:

        \'meta_query\' => [
            [
                \'key\'     => \'webinar\',
                \'compare\' => \'EXIST\',
            ]
        ],

然而,整个方法都是错误的,查询速度会非常慢/非常昂贵,不必这样。自定义字段不是为查找帖子而设计的,按帖子的元数据搜索、过滤、查询帖子是非常昂贵/沉重/缓慢/不必要的。

有两种方法可以更快、更容易地实现数千倍的速度,它们允许您完全避免构建自定义查询(并且它们提供免费分页、REST API、URL、管理屏幕等)

1. Custom Post Types, 您可以创建一个网络研讨会帖子类型。然后你就可以在/webinar 可以通过rewrite 参数archive-webinar.php 在您的主题中,所有自动创建的魔术都是免费的!甚至会有一个单独的WP管理界面用于网络研讨会。为什么要努力用自定义字段重新创建它,省去了麻烦。您可以访问以下站点https://generatewp.com/post-type/ 或者他们的竞争对手之一,并填写一些问题,它将生成代码供您复制粘贴

2: Custom Taxonomy, 如果您需要过滤/搜索/查询/限制等,那么使用自定义分类法,这就是它们的设计目的。标签和类别没有存储为自定义字段是有原因的。这些也给了你很多免费的东西。喜欢免费模板taxonomy-webinar.php 在你的主题中,免费存档URL、用户界面、javascript的REST API等。你甚至可以使用与自定义帖子类型和复制粘贴相同的网站免费生成代码

进一步说明:

不要把所有的输出都集中在一个无意义的变量中,这只意味着你的浏览器正在等待输出,这让转义变得非常困难。如果需要它作为短代码的字符串,只需在查询和调用后使用输出缓冲区进行清理wp_reset_postdata 在while循环结束后,或者当前帖子将设置为循环的最后一篇帖子,而不是当前页面\'showposts\' => -1,posts_per_page 设置为-1, 将其设置为一个超高的数字,你知道它永远不会达到,但永远不会-1, 否则,如果发生事故,如果业务发生变化,如果网站多年来增加网络研讨会,您可能会出现内存耗尽或超时错误。不要说它永远不会发生,而是设置一个高数字并保证它不会发生

相关推荐

如何使用PHP函数触发WP CLI DB导出?

我想使用WP-CLI导出数据库-使用wp db export - 创建备份。我还需要使用cron来控制备份计划。WP-CLI安装在我的托管主机上,我可以通过SSH, 但我不能用cron 直接在我的服务器上。为了使用我自己的cron作业来安排备份,我需要使用插件WP Crontrol来添加和编辑cron 工作;该插件使用函数作为add_action, i、 e。my_backup_cron 开火my_backup_function:这是插件使用的格式:add_action( \'my_backup_cron