gpt4 book ai didi

php - 使用 Wordpress wp_query 搜索存储在数组中的多个变量的出现

转载 作者:行者123 更新时间:2023-11-29 21:50:00 25 4
gpt4 key购买 nike

这个问题应该很容易解决,我想和我使用LIKE有关,但我就是只见树木不见森林!

我定义了一个名为“类(class)”的自定义帖子类型 (CPT)。使用高级自定义字段 (ACF),类(class) CPT 有一个名为 TEACHERS 的列。 ACF 在 TEACHERS 列中存储大量数据,包括每位教师的唯一 ID。

$_SESSION['search_teachers'] 由表单中的多选字段填充,并包含我想要搜索 TEACHERS 列的教师 ID。它可以包含任意数量的教师 ID。

这是我到目前为止所拥有的:

$teachers = implode($_SESSION['search_teachers'],',');

$args_courses = array(
'post_type' => 'courses',
'posts_per_page' => 9999,
'meta_query' => array(
array(
'key' => 'active',
'value' => 1,
'compare' => '='
),
array(
'key' => 'teachers',
'value' => $teachers,
'compare' => 'LIKE'
)
),
'orderby' => 'course_name',
'order' => 'ASC'
);

请注意我正在使用:

'key' => 'active', 'value' => 1, 'compare' => '='

在我的 WP_query 中过滤类(class)当前是否处于事件状态。

如果 $_SESSION['search_teachers'] 仅包含 1 个教师 ID,我的 WP_query 工作正常。当 $_SESSION['search_teachers'] 包含多个教师 ID 时,如何使其工作?

预先感谢您的帮助!

编辑:这是我的教师专栏中包含的内容:

a:3:{i:0;s:3:"509";i:1;s:3:"511";i:2;s:3:"514";}

这就是我的 $_SESSION['search_teachers'] 中包含的内容:

Array ( [0] => 511 [1] => 514 )

最佳答案

请参阅 wp-includes/meta.php 中的类 WP_Meta_Query,从 wp-includes/query.php 引用。

$teachers = $_SESSION['search_teachers'];   // keep as array

...
array(
'key' => 'teachers',
'value' => $teachers, // an array of strings
// 'compare' => 'IN' // this is default if $teachers is an array
)

更新

鉴于教师栏的值(value)为

a:3:{i:0;s:3:"509";i:1;s:3:"511";i:2;s:3:"514";}

这是 serialize d 数据,没有可靠的方法可以使用 SQL 进行查询。此类数据旨在在 PHP 级别使用,而不是由数据库使用。最好简单地使用多个 postmeta 条目,这对于我上面给出的解决方案来说效果很好。

您可以尝试通过以下方式“破解”它,但是 1)我不推荐它,因为如果序列化数据的结构发生更改,它可能会给出误报,并且 2)这是不可能的:

'meta_query' => array_merge(
array(
'key' => 'active',
'value' => 1,
'compare' => '='
),

// TODO: 'OR'
array_map( function($teacher_id) {
return array(
'key' => 'teachers',
'value' => "%\"$teacher_id\"%",
'compare => 'LIKE'
);
} )
),

如您所见,我们需要以某种方式将其变成

WHERE ... 
(active = 1 AND (
teachers LIKE '%"ID_1"%'
OR teachers LIKE '%"ID_2"%'
OR teachers LIKE '%"ID_3"%'
))

但是this is not possible with meta_query .

正如我之前所说,您应该使用多值元,如下所示:

table wp_postmeta:

meta_id | post_id | meta_key | meta_value
--------+---------+-------------+------------
1000 | 20000 | teacher | 509
1001 | 20000 | teacher | 511
1002 | 20000 | teacher | 514

关于php - 使用 Wordpress wp_query 搜索存储在数组中的多个变量的出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33741916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com