无法弄清楚如何在WP Advanced Search表单中使用具有多个值的ACF自定义字段。
我正在使用“高级自定义字段”和“ WP高级搜索”进行多面搜索,遇到的大多数问题我都能自己弄清,或者最终找到某人做类似的事情。
但是,到目前为止,我还找不到任何有关如何使用具有多个值的自定义字段的示例。我不知道如何设置WPAS表单来解决每个单独的值,或者甚至可能。
此自定义字段仅存储post的单个值,在这种情况下,wp_postmeta中的meta_value只是预期的字符串,即。公寓,联排别墅,独立式住宅等。这很好...
$args['fields'][] = array( 'type' => 'meta_key',
'meta_key' => 'property_style',
'format' => 'multi-select',
'compare' => 'LIKE',
'data_type' => 'ARRAY<CHAR>',
'relation' => 'OR',
'label' => 'Property Style',
'values' => array(
'Condo Townhouse' => 'Condo Townhouse',
'Condo Apartment' => 'Condo Apartment',
'Detached' => 'Detached',
'Semi-Detached' => 'Semi-Detached',
'Freehold Townhouse' => 'Freehold Townhouse',
'Link' => 'Link',
'Other' => 'Other'
)
);
此ACF字段接受多个值。存储它们不是问题。 ACF生成的多重选择效果很好,就像我的导入器一样,但我似乎无法理解如何设置'data_type'和'compare'值以实际解决这些单个值...我的理论是'data_type '需要反映由meta_value中存储的字符串表示的数组的结构(请参阅问题),但我不太清楚...
$args['fields'][] = array( 'type' => 'meta_key',
'meta_key' => 'basement',
'format' => 'multi-select',
'compare' => 'LIKE',
'data_type' => 'ARRAY<CHAR>',
'relation' => 'OR',
'label' => 'Basement',
'values' => array(
'Apartment' => 'Apartment',
'Crawl Space' => 'Crawl Space',
'Finished Walk Out' => 'Finished Walk Out',
'Finished' => 'Finished',
'Full' => 'Full',
'Half' => 'Half',
'None' => 'None',
'Other' => 'Other',
'Partial Basement' => 'Partial Basement',
'Partially Finished' => 'Partially Finished',
'Separate Entrance' => 'Separate Entrance',
'Unfinished' => 'Unfinished',
'Walk Out' => 'Walk Out',
'Walk-Up' => 'Walk-Up'
));
如果有帮助,则多选字段的元数据如下所示:
--------------------------------------------------------------------------------------------+
| meta_id | post_id | meta_key | meta_value |
+---------+---------+-----------+-----------------------------------------------------------+
| 150263 | 5286 | _basement | field_5cf59fb01a564 |
| 150262 | 5286 | basement | a:1:{i:0;s:9:"Apartment";} |
| 150025 | 5276 | _basement | field_5cf59fb01a564 |
| 150026 | 5276 | basement | a:1:{i:0;s:9:"Apartment";} |
| 149792 | 5255 | _basement | field_5cf59fb01a564 |
| 149793 | 5255 | basement | a:2{i:0;s:8:"Finished";i:1;s:4:"Full";} |
| 149531 | 5238 | _basement | field_5cf59fb01a564 |
| 149532 | 5238 | basement | a:2{i:0;s:9:"Apartment";i:1;s:17:"Separate Entrance";} |
| 149278 | 5220 | _basement | field_5cf59fb01a564 |
| 149279 | 5220 | basement | a:2{i:0;s:9:"Apartment";i:1;s:8:"Finished";} |
| 149023 | 5199 | _basement | field_5cf59fb01a564 |
| 149024 | 5199 | basement | a:2{i:0;s:8:"Finished";i:1;s:17:"Separate Entrance";} |
我知道我做错了,甚至找不到关于我应该做什么的信息。我不确定WP Advanced Search仍在开发中,但它仍可在WP的最新版本中正常运行,因此并不是我真正关心的问题。
答案 0 :(得分:0)
我不确定我做了什么不同的事情,但这似乎奏效了……我认为我从一开始就是对的,但也许还有其他原因导致其他地方出现问题...
无论如何,它与具有单个值的常规ACF自定义字段的语法相同。
$args['fields'][] = array( 'type' => 'meta_key',
'meta_key' => 'basement',
'format' => 'multi-select',
'compare' => 'LIKE',
'data_type' => 'ARRAY<CHAR>',
'relation' => 'OR',
'label' => 'Basement',
'values' => array(
'Apartment' => 'Apartment',
'Crawl Space' => 'Crawl Space',
'Finished Walk Out' => 'Finished Walk Out',
'Finished' => 'Finished',
'Full' => 'Full',
'Half' => 'Half',
'None' => 'None',
'Other' => 'Other',
'Partial Basement' => 'Partial Basement',
'Partially Finished' => 'Partially Finished',
'Separate Entrance' => 'Separate Entrance',
'Unfinished' => 'Unfinished',
'Walk Out' => 'Walk Out',
'Walk-Up' => 'Walk-Up'
)
);
编辑:我弄清楚了为什么我认为这是错误的。当我使用通过后端输入的值时,它开始工作。我在导入程序中生成的值缺少冒号。
ACF生成的序列化数组:a:2:{i:0; s:9:“ Apartment”; i:1; s:11:“ Crawl Space”;}
我的进口商的“序列化数组”:a:2 {i:0; s:8:“ Finished”; i:1; s:4:“ Full”;
(“ a:2”后没有冒号)
也许我实际上像普通人类一样序列化了一个数组,而不是像怪异的人那样通过字符串操作来完成所有工作,所以我永远不会花所有的时间来尝试修复工作代码。让这成为我们所有人的课程,但主要是我的课程。