WP-Advanced-Search с использованием поля множественного выбора ACF - PullRequest
1 голос
/ 26 июня 2019

Не могу понять, как использовать настраиваемое поле ACF с несколькими значениями в форме расширенного поиска WP.

Я работаю над многогранным поиском с использованием расширенных настраиваемых полей и расширенного поиска WP, и большинство проблемЯ столкнулся, я был в состоянии выяснить самостоятельно или в конечном итоге найти кого-то, кто делает что-то подобное.

Пока что, однако, я не могу найти пример того, как использовать настраиваемое поле с несколькимиценности.Я не знаю, как настроить форму WPAS для адресации каждого отдельного значения, или, если это вообще возможно.

В этом настраиваемом поле хранится только одно значение для записи, в этом случае meta_value в wp_postmeta - это простоожидаемая строка т.е.Кондо, Таунхаус, Отдельно стоящий и т. Д. Это нормально работает ...

$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» и «сравнить» для фактического обращения к этим отдельным значениям ... Моя теория - «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 голосов
/ 26 июня 2019

Я не совсем уверен, что я сделал по-другому, но это, кажется, сработало ... Я думаю, что я был прав с самого начала, но, возможно, что-то еще вызывает проблемы в другом месте ...

В любом случае этотот же синтаксис, что и в обычном пользовательском поле 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: "Квартира"; i: 1; s: 11:"Crawl Space";}

"Сериализованный массив" моего импортера: a: 2 {i: 0; s: 8: "Закончено"; i: 1; s: 4: "Полно";

(без двоеточия после "a: 2")

Возможно, если бы я на самом деле сериализовал массив, как обычный человек, вместо того, чтобы делать все это через манипуляции со строками, как чудак, я бы никогда не потратил всена этот раз пытаюсь исправить рабочий код.Пусть это будет уроком для всех нас, но в основном для меня.

...