【问题标题】:WordPress query posts by ACFACF 的 WordPress 查询帖子
【发布时间】:2018-05-14 10:02:17
【问题描述】:

更新 - 已解决

好的,我有三种自定义帖子类型“课程”、“模块”和“结果”。 这些帖子类型设置有许多 ACF(高级自定义字段)。

我正在尝试使用“meta_query”根据他们的 ACF 查询“结果”CPT。

我尝试查询的两个 ACF 字段是“模块”和“用户”。

  • 'module' - 设置为“关系”字段类型过滤 'module' 自定义帖子类型。
  • “用户” - 设置为(关系)“用户”字段类型。

我似乎只得到一个空数组。我已经查看了https://www.advancedcustomfields.com/resources/query-posts-custom-fields/#custom-field%20parameters 上的示例,但仍然没有任何运气。

function check_results_for_user( $module_id, $user_id ){

  $posts = get_posts(array(
    'numberposts'   => -1,
    'post_type'     => 'results',
    'meta_query'    => array(
            'relation'      => 'AND',
            array(
                'key'       => 'module',
                'value'     => $module_id,
                'compare'   => '=',
            ),
            array(
                'key'       => 'user',
                'value'     => $user_id,
                'compare'   => '=',
            ),
    ),
  ));

  return $posts;

}

调用函数:

print_r(check_results_for_user($post->ID, $currentUserID ));

结果:

Array ( ) 

更新 - 已解决:

好的,所以设法弄清楚了。是由于“模块”关系字段将其数据保存为序列化数组:a:1:{i:0;s:1:"9";}

因此您必须将比较更改为 'LIKE' 并将值包装在 "

function check_results_for_user( $module_id, $user_id ){

  $posts = get_posts(array(
    'numberposts'   => -1,
    'post_type'     => 'results',
    'meta_query'    => array(
            'relation'      => 'AND',
            array(
                'key'       => 'module',
                'value'     => '"'.$module_id.'"',
                'compare'   => 'LIKE',
            ),
            array(
                'key'       => 'user',
                'value'     => $user_id,
                'compare'   => '=',
            ),
    ),
  ));

  return $posts;

}

见本页末尾:https://www.advancedcustomfields.com/resources/querying-relationship-fields/

【问题讨论】:

  • 在 ACF 中选择字段类型关系 -> 用户也设置关系 -> 'user' - 设置为“关系”字段类型。
  • 你确定你的user_id不是空的尝试获取用户id$user_id = get_current_user_id();
  • 感谢帮助设法弄清楚这是由于“模块”数据被保存为序列化数组 - 我已经更新了问题
  • 尽可能回答你自己的问题 - 这样就不会再有像我这样的人在阅读它已经解决之前进入并尝试解决它:)

标签: php wordpress advanced-custom-fields


【解决方案1】:

更新 - 已解决:

好的,所以设法弄清楚了。是由于“模块”关系字段将其数据保存为序列化数组:a:1:{i:0;s:1:"9";}

因此您必须将比较更改为 'LIKE' 并将值包装在 "

function check_results_for_user( $module_id, $user_id ){

  $posts = get_posts(array(
    'numberposts'   => -1,
    'post_type'     => 'results',
    'meta_query'    => array(
            'relation'      => 'AND',
            array(
                'key'       => 'module',
                'value'     => '"'.$module_id.'"',
                'compare'   => 'LIKE',
            ),
            array(
                'key'       => 'user',
                'value'     => $user_id,
                'compare'   => '=',
            ),
    ),
  ));

  return $posts;

}

见本页末尾:https://www.advancedcustomfields.com/resources/querying-relationship-fields/

【讨论】:

  • 我认为您不需要将$module_id 括在引号内,至少在我的情况下,只要您使用LIKE 运算符,它就可以完美地工作。顺便说一句,你的帖子对我帮助很大!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多