WordPress+ACF关联数据查询问题:产品页无法获取关联评论
自定义文章类型
reviews与WooCommerce产品关联问题 背景
我通过代码创建了自定义文章类型reviews,并使用Advanced Custom Fields插件创建自定义字段。该reviews类型包含一个关系字段,用于关联WooCommerce的product文章类型。目前在review页面中可正常获取关联的产品数据,但在产品页面无法显示其关联的评论内容。
我查阅了Advanced Custom Fields的双向关系相关文档,但后台界面找不到对应的“高级”选项卡,无法设置bidirectional: true。
最初无效代码尝试
我在content-single-page中编写以下代码,结果返回了所有评论,而非当前产品关联的评论:
$args = [ 'post_type' => 'reviews', 'meta_query' => [ 'key' => 'related_product', 'value' => '"' . get_the_ID() . '"' ] ]; $reviews = get_posts($args);
有效数据库查询语句
直接通过MySQL查询可获取目标数据,返回关联评论对应的post_id:
SELECT * FROM `wp_postmeta` AS M WHERE M.meta_key = 'related_product' AND M.meta_value LIKE '%{$productId}%';
核心问题
- 为什么Advanced Custom Fields中看不到用于设置双向关系的“高级”选项卡?若能设置双向字段,是否可解决当前问题?
- 若必须自行编写SQL查询获取产品关联评论,如何将上述MySQL语句转换为可运行的PHP代码?
更新1:替换字段键后仍无效
将meta_query参数中的字段名称替换为Advanced Custom Field键field_64d8fd0dfc04e后,查询仍返回所有reviews类型文章,推测get_posts可能忽略了meta_query参数值:
$productID = get_the_ID(); $args = [ 'post_type' => 'leirmheasanna', 'meta_query' => [ 'key' => 'field_64d8fd0dfc04e', 'value' => $productID ] ]; $reviews = get_posts($args);
更新2:尝试WPDB查询无效
使用$wpdb编写的查询返回0条结果,推测是数据库中该字段存储的值并非仅包含产品ID,改用LIKE替代=后仍无效:
global $wpdb, $product; $field_key = 'field_648f2aaff9f4b'; $reviews = $wpdb->get_results( $wpdb->prepare(" SELECT * FROM {$wpdb->prefix}postmeta AS pm WHERE pm.meta_key = '%s' AND pm.meta_value = %d ", $field_key, $post->ID ));
更新3:最终有效的WPDB查询语法
找到了正确的$wpdb->get_results()查询写法,可成功获取产品关联的评论数据:
$column = 'related_product'; $value = '%'.get_the_ID().'%'; $reviews = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}postmeta AS pm WHERE pm.meta_key = '%s' AND pm.meta_value LIKE '%s' ", $column, $value));
内容的提问来源于stack exchange,提问作者Linda Keating
相关产品推荐
相关产品推荐

