我仍然不确定自定义字段中的值是如何保存到db中的,但db中的格式与查询的格式不匹配meta_value
. 从您的图像来看,您似乎正在一个自定义字段下保存5个值,或以es: xxxxxx
这永远不会匹配es
明确地
要对此进行调试,或者真正确定值的存储方式,请运行以下查询并记录自定义字段的输出。你应该从那里开始
$args = [
\'post_type\' => \'page\',
\'meta_key\' => \'program_skola\'
];
$q = new WP_Query( $args );
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
?><pre><?php var_dump( get_post_meta( get_the_ID(), \'program_skola\' ) ); ?></pre><?php
}
wp_reset_postdata();
}
从您的
var_dump()
从…起
get_post_meta()
:
array (size=5)
0 => string \'ek\' (length=2)
1 => string \'es\' (length=2)
2 => string \'nv\' (length=2)
3 => string \'sp\' (length=2)
4 => string \'tp\' (length=2)
这是存储为自定义字段单个值的值数组。遗憾的是,当您需要自定义字段数据进行排序或搜索功能时,您不能使用序列化数据(存储为数组的值在存储之前序列化),因为它永远不会工作(如您所见)。一般来说,为了在将来的方法中不会出现问题,应使用自定义字段仅存储一个值,以便进行搜索和排序
您应该为每个值创建一个自定义字段,然后使用如下值0
和1
作为触发器。例如,一篇文章可以有一个字段es
值为0
或no
或值1
或yes
. 其他自定义字段将为ek
, nv
等,每个字段都有描述的值。如果需要使用自定义字段查询帖子es
标记为1
(这意味着,据我所知,这门课程是必需的),您可以如下查询
$args = [
\'post_type\' => \'page\',
\'meta_key\' => \'es\',
\'meta_value\' => 1
];
$q = new WP_Query( $args );
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
the_title();
}
wp_reset_postdata();
}
至于您当前的设置,我唯一能快速想到的是以下内容
$args = [
\'post_type\' => \'page\',
\'meta_key\' => \'program_skola\'
];
$q = new WP_Query( $args );
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
$meta = get_post_meta( get_the_ID(), \'program_skola\' ) );
if ( in_array( \'es\', $meta ) ) {
// Display posts with value \'es\'
the_title();
}
}
wp_reset_postdata();
}
应该注意的是,这对性能不是很好,因为您正在查询不需要的帖子,这会浪费时间和db调用