使用ACF多选字段的WP高级搜索

时间:2019-06-26 04:01:26

标签: php wordpress advanced-custom-fields

无法弄清楚如何在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的最新版本中正常运行,因此并不是我真正关心的问题。

1 个答案:

答案 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”后没有冒号)

也许我实际上像普通人类一样序列化了一个数组,而不是像怪异的人那样通过字符串操作来完成所有工作,所以我永远不会花所有的时间来尝试修复工作代码。让这成为我们所有人的课程,但主要是我的课程。