spot_img
HomeWordPress教程wordpress教程菜鸟教程 使用 postmeta 获取帖子的最有效方式

wordpress教程菜鸟教程 使用 postmeta 获取帖子的最有效方式

JasperAI 10000字免费额度试用

我需要获得一堆带有元数据的帖子。 当然你不能用标准的帖子查询来获取元数据,所以你通常必须做一个 get_post_custom() 对于每个帖子。

我正在尝试使用一个自定义查询,如下所示:

$results = $wpdb->get_results("
    SELECT  p.ID,
        p.post_title,
        pm1.meta_value AS first_field,
        pm2.meta_value AS second_field,
        pm3.meta_value AS third_field
    FROM    $wpdb->posts p LEFT JOIN $wpdb->postmeta pm1 ON (
            pm1.post_id = p.ID  AND
            pm1.meta_key    = 'first_field_key'
        ) LEFT JOIN $wpdb->postmeta pm2 ON (
            pm2.post_id = p.ID  AND
            pm2.meta_key    = 'second_field_key'
        ) LEFT JOIN $wpdb->postmeta pm3 ON (
            pm3.post_id = p.ID  AND
            pm3.meta_key    = 'third_field_key'
        )
    WHERE   post_status="publish"
");

似乎工作。 如果您以允许在同一篇文章中使用多个元值的方式使用这些元字段中的任何一个,它就会出错。 我想不出这样做的方法。

那么,问题 1:是否有连接、子查询或其他任何东西来引入多值元字段?

WordPress divi主题

但问题 2:值得吗? 多少 postmeta 在 2 查询方法变得更可取之前,我应该添加表连接吗? 我可以在一个查询中获取所有发布数据,然后在另一个查询中获取所有相关的 postmeta,然后在 PHP 中将元数据与发布数据组合到一个结果集中。 如果可能的话,这最终会比单个越来越复杂的 SQL 查询更快吗?

我总是认为,“把尽可能多的工作交给数据库”。 不确定这个!

发布元信息自动缓存在内存中以实现标准 WP_Query (和主查询),除非您使用 update_post_meta_cache 范围。

因此,您不应该为此编写自己的查询。

元缓存如何用于普通查询:

如果 update_post_meta_cache 参数到 WP_Query 未设置为 false,则在从数据库中检索到帖子后, update_post_caches() 函数将被调用,它又调用 update_postmeta_cache().

update_postmeta_cache() 函数是一个包装器 update_meta_cache(),它本质上称为一个简单的 SELECT 检索到所有帖子的 ID。 这将使它获得所有postmeta,查询中的所有帖子,并将该数据保存在对象缓存中(使用 wp_cache_add()).

当你做类似的事情时 get_post_custom(),它首先检查该对象缓存。 因此,此时它不会进行额外的查询来获取帖子元数据。 如果你在 WP_Query,然后元已经在内存中,它直接从那里获取它。

谷歌SEO优化服务

这里的优势比进行复杂查询大很多倍,但最大的优势来自于使用对象缓存。 如果您使用持久内存缓存解决方案,如 XCache 或 memcached 或 APC 或类似的东西,并且有一个插件可以将您的对象缓存绑定到它(例如 W3 Total Cache),那么您的整个对象缓存都存储在快速内存中已经。 在这种情况下,有 检索您的数据所需的查询; 它已经在记忆中了。 持久对象缓存在很多方面都很棒。

换句话说,您的查询可能比使用正确的查询和简单的持久内存解决方案加载和加载更慢。 使用正常 WP_Query. 省点力气。

额外的: update_meta_cache() 很聪明,顺便说一句。 它不会检索已经缓存了元信息的帖子的元信息。 基本上,它不会两次获得相同的元数据。 超级高效。

附加附加: “把尽可能多的工作交给数据库。”……不,这是网络。 适用不同的规则。 一般来说,你总是想给 小的 如果可行,尽可能对数据库进行操作。 数据库速度慢或配置不当(如果您没有专门配置它,您可以打赌这是真的)。 它们通常在许多站点之间共享,并且在某种程度上超载。 通常,您拥有的 Web 服务器多于数据库。 通常,您只想尽可能快和简单地从数据库中获取所需的数据,然后使用 Web 服务器端代码对其进行排序。 当然,作为一般原则,不同的情况都是不同的。

H10的年终大促

我会推荐一个数据透视查询。 使用你的例子:

SELECT  p.ID,   
        p.post_title, 
        MAX(CASE WHEN pm1.meta_key = 'first_field' then pm1.meta_value ELSE NULL END) as first_field,
        MAX(CASE WHEN pm1.meta_key = 'second_field' then pm1.meta_value ELSE NULL END) as second_field,
        MAX(CASE WHEN pm1.meta_key = 'third_field' then pm1.meta_value ELSE NULL END) as third_field,

 FROM    wp_posts p LEFT JOIN wp_postmeta pm1 ON ( pm1.post_id = p.ID)                      
GROUP BY
   p.ID,p.post_title

5分钟生成10篇英文软文article forge软件试用
跨境电商独立站代运营服务综合套餐项目合作请联系客服微信 13564054264
服务项目服务模块服务效果服务周期服务费用 RMB
海外市场调研
与品牌诊断
目标市场调研1份调研报告按次(5-7个工作日)5000
消费受众分析
市场准入条件
竞品发展轨迹
市场销售策略
品牌商业化诊断
TikTok
账号代运营
TikTok账号定位3个账号运营
500条视频内容发布
按季度(50-65个工作日)30000
TikTok内容策划
TikTok视频制作
TikTok账号涨粉
TikTok数据分析
TikTok
直播代运营
TikTok直播策划20-24场直播按月度(20-24个工作日)15000
TikTok网络搭建
TikTok选品分析
TikTok话术提炼
TikTok直播开展
TikTok直播数据分析
TikTok
KOL/KOC营销
TikTok行业达人匹配500-1000个达人邀约/天按月度(20-24个工作日)10000
TikTok行业达人邀约
TikTok行业达人签约
TikTok达人合作跟进
TikTok达人合作完成
海外社媒
代运营
海外社媒运营需求确认insgarm
Facebook
Pinterest
Linkedln
海外社媒运营(4选2)
按季度(50-65个工作日)30000
海外社媒运营方案制订
海外社媒代运营开展
海外社媒活动策划&开展
海外社媒账户涨粉&数据分析
海外线下
代理商拓展
渠道代理目标市场确认主要服务地区为欧美/东南亚
限定1-3个国家
按季度(50-65个工作日)35000
渠道代理商信息抓取
渠道代理商邮件邀约
渠道代理商洽谈准备
渠道代理商签约合作
渠道代理商完成合作
海外广告代投放海外广告账户开户TikTok
Google
Facebook
海外广告代投
(电商/游戏)
按季度(50-65个工作日)开户首充1000美金
10%广告投放佣金
海外广告产品分析
海外广告代投计划制订
海外广告代投内容制作
海外广告代投放开展
海外广告代投效果优化项目合作请联系客服微信 13564054264
siteground

【WordPress花园提醒您】如果想购买国外正版WordPress主题和插件,您需要一张VISA信用卡才能支付,这里我们推荐光大银行信用卡!赶快免费申请,别耽误了买插件哦!

guangda
WordPress花园官方账号
WordPress花园隶致力于为广大跨境电商和独立站爱好者提供优质的WordPress教程、Woocommerce教程、Facebook、Twitter、tiktok、Instagram教程和谷歌SEO教程等资料和对应的建站推广服务。关注‘哟派出海’公众号了解最新资讯。粉丝福利:Shopline免费独立站建设14天优惠 商务合作: [email protected]
RELATED ARTICLES