当前位置: 首页 > 知识库问答 >
问题:

WordPress元查询检查元值数组中的当前用户

丁和歌
2023-03-14

如果s/he在元值数组中,我很难查询当前用户的cpt。

$args = [
    'post_type'      => $cp::get_module_cpt(),
    'posts_per_page' => - 1,
    'meta_query'     => [
        'relation' => 'AND',
        [
            'key'     => 'premium_module',
            'value'   => 0,
            'compare' => '=',
        ],
        [
            'key'     => 'permit_users',
            'value'   => get_current_user_id(),
            'compare' => 'IN',
        ],
    ],
];

允许用户

a:5:{i:0;s:2:"23";i:1;s:1:"2";i:2;s:1:"6";i:3;s:1:"7";i:4;s:2:"27";}
Array
(
    [0] => 29
    [1] => 28
    ...
)

返回false或空数组。取决于之前是否设置过字段。

我试过将compare设置为=相等,但也不起作用。可能是因为该值位于数组中。

查询应返回permit\u users键中具有当前用户id的所有帖子。

重要提示:
允许用户的是可选的,因此如果字段没有值(false)或空数组,查询应该忽略它。

我试过与进行比较,就像那样,似乎很有效。但是比较序列化数据好吗?如果当前用户是11,并且值中有111用户,该怎么办?


共有1个答案

罗学真
2023-03-14

我的建议是,如果这个自定义帖子类型是由您开发的,那么您可以尝试取消序列化并将每个用户保存在单独的行中

格式为permit\u users\uu id}且值为user\u id的元密钥。

将上述格式的保存值设置为true(最后一个参数)

add_post_meta( 68, 'permit_users_' . get_current_user_id(), '21', true );

否则,你的项目数据库现在已经非常成熟,很难做上面的建议更改,那么你可以使用下面的元查询

$args = [
    'post_type'      => $cp::get_module_cpt(),
    'posts_per_page' => - 1,
    'meta_query'     => [
        'relation' => 'AND',
        [
            'key'     => 'premium_module',
            'value'   => 0,
            'compare' => '=',
        ],
        [
            'key'     => 'permit_users',
            'value'   => sprintf(':"%s";', get_current_user_id()),
            'compare' => 'LIKE',
        ],
    ],
];

上面一个将与序列化数据一起工作,值为代码>11 ,<代码> 111 < /代码>,但请将此视为临时解决方案。

我再次请求您尝试实现将序列化数据转换为单独的值行。

附加说明:如果序列化的字符串非常长,并且在最坏的情况下,从长字符串中匹配查询用户id需要时间。因此,以较短的长度维护这些序列化数据,但不要担心,并进行早期优化,直到慢速查询日志记录,然后我们可以使用优化的解决方案,如添加索引或添加新的搜索引擎层,例如弹性搜索。

 类似资料:
  • 我在wp_query,我需要你的帮助。 我有3个自定义字段,分别称为“议程日”、“议程月”、“议程年”,表示事件的日期、月份和年份。 我想按日、月、年顺序排列查询结果。 下面是我的问题: 这不起作用。。。你能解释一下原因并告诉我怎么修理吗? 非常感谢。 编辑 这是已执行的查询(返回结果,但顺序不正确) 选择SQL_CALC_FOUND_ROWSwp_posts。ID从wp_posts离开加入wp_

  • 我有一篇有三个元域的帖子。 我想查询这个类别,并根据其中一个的元字段值对帖子进行排序。我现在使用的参数是: 其中times是元字段的名称。上面的代码没有返回任何内容。

  • 我有一个如下所示的数据库表: 我想使用PostgreSQL的JSON查询功能来选择JSON\u数组中的某些子字典,例如字典中的a:1。 输出应为 以下查询适用于每个数组中的第一个元素,但我想检查所有元素:

  • 本文向大家介绍用MongoDB查询数组元素?,包括了用MongoDB查询数组元素?的使用技巧和注意事项,需要的朋友参考一下 查询数组元素时,MongoDB更好。让我们使用以下语法查询数组元素- 上面的语法将返回所有在数组字段中具有“ yourValue”值的文档。 为了理解这个概念,让我们用文档创建一个集合。使用文档创建集合的查询如下- 在method的帮助下显示集合中的所有文档。查询如下- 以下

  • 主要内容:JavaTuples 元组检查元素的方法,JavaTuples 元组检查元素的示例JavaTuples 元组检查元素的方法 每个元组都提供实用方法来以与集合类似的方式检查其元素。 contains(element) : 检查元素是否存在。 containsAll(collection) : 检查元素是否存在。 indexOf(element) : 如果存在,则返回第一个元素的索引,否则返回 -1。 lastIndexOf(element) : 如果存在,则返回最后一个元素的索引

  • 最近升级到使用PostgreSQL 9.3.1来利用JSON功能。在我的表中,我有一个json类型列,其结构如下: 就问题而言,这只是虚拟数据。 是否可以根据id查询电子邮件数组中的特定项目 差不多:“返回id=123的电子邮件)”?