用于列出特定帖子类型的所有帖子的SQL查询,其中包含一组特定的关联帖子值作为一列

时间:2019-10-08 作者:elb

我希望所有类型为“ajde\\U事件”的帖子都是一行,每个帖子都有一列,其中包含post表中的一些基本信息和一些(并非全部)关联的postmeta值。我从这篇文章中抄袭了以下内容How to display multiple Post meta_key/meta_values by SQL query 但正如op在注释中所说,它只返回一行(这似乎是一行,其中位置是以“Z”开头的字符串,我怀疑它是“最高的”,即最大字符串)。

SELECT p.ID, p.post_title,
MAX(IF(PM.meta_key = \'evcal_location\', PM.meta_value, NULL)) AS location,
MAX(IF(PM.meta_key = \'evcal_srow\', PM.meta_value, NULL)) AS start_time
FROM wp_posts AS p
LEFT JOIN wp_postmeta AS pm ON p.ID = pm.post_id
WHERE post_type = \'ajde_events\' AND post_status = \'publish\'
ORDER BY p.ID
如何获得每个相关职位的一行?

2 个回复
SO网友:WebElaine

使用内置WP函数获取数据通常是一种更好的方法。它的性能更高,而且在安全方面更可取,因为您使用的是预构建的查询,而不是构建自己的查询。

在插件中,您可以使用以下内容:

<?php
// Get all published CPTs
$allEvents = get_posts(array(
    \'post_type\' => \'ajde_events\',
    \'post_status\' => \'publish\',
    \'numberposts\' => -1
));
// If any were found
if($allEvents) {
    // Open/create your csv (your code here)
    // Loop through all CPTs and grab postmeta
    foreach($allEvents as $event) {
        $meta = get_post_meta($event);
        // Save the postmeta with the post object
        $event->evcal_location = $meta[\'evcal_location\'];
        $event->evcal_srow = $meta[\'evcal_srow\'];
        // Add the full post object, with postmeta, to an array
        $fullData[] = $event;
    }
    // Reset the query
    wp_reset_postdata();
    // Save to the csv and close it (your code here)
}
?>
将此代码放在何处取决于您希望插件如何工作。也许您想要创建一个管理屏幕,用户可以在其中手动按下按钮下载CSV,或者您想要一个每天自动构建CSV并通过电子邮件发送文件的cron作业。

SO网友:elb

我发布的查询只需要将ORDER BY子句更改为GROUP BY,然后它就会执行我想要的操作。

相关推荐

如果将用户添加到帖子,则隐藏帖子WP_QUERY

我在wordpress上有这个帖子列表。我制作了一个收藏夹函数,当您将某个内容标记为收藏夹时,它会添加到行的前面。这里的问题是我经营这两个地方。顶部的一个面板显示我最喜欢的帖子,然后是第二个帖子,显示其他用户最喜欢的帖子。顶部面板工作正常。。但问题是,我的个人资料卡显示在第二个面板中,其他用户卡显示在该面板中:https://gyazo.com/75cf45a0844cba1f9ca6818e059d8bf6正如你所看到的。。。我在第二个面板中有一个副本。如何使用WP\\u查询消除它?用户位于具有ACF字