Intereting Posts
Загружать HTML-контент страницы через AJAX Стандартное или предустановленное содержимое для пользовательских типов сообщений Гравитационная форма: перенаправление при условии? Заменить css с использованием отрицательных условных тегов Multisite – получение одной и той же темы со всех сайтов сети Как создать галерею с динамическими изображениями из URL-адресов? Отображение ценового диапазона по вариациям продукта woocommerce Как работать с синтаксисом Highlighter? Как создать альтернативный полнотекстовый редактор для сообщений? Допустимая фатальная ошибка: объект класса WP_Error Могу ли я использовать два разных доменных имени в многопользовательской сети WordPress? Как правильно запросить admin-ajax.php, когда URL-адрес WordPress и URL-адрес сайта различны? Настройка подменю admin появляется только тогда, когда я привязался к пользовательской ссылке Переименование проблемы wp_content Отображение нескольких случайных сообщений, но убедитесь, что выполнено условие

Что такое случайная строка, которую я вижу при использовании get_query_var?

Я настраиваю страницу расширенного поиска с полями ACF с пользовательским типом сообщения в wordpress.

В моем примере я отправляю «Студенты» в параметры моего url как «licenseType = Students»

Пример поиска

* EDIT добавление PHP-кода:

<select id="licenseType" name="licenseType"> <option value="">All License Types</option> <?php $field = get_field_object('software_license_type'); if( $field ) { foreach( $field['choices'] as $key => $value ) { echo '<option value="'.$key.'" '.((isset($_GET['licenseType']) && $_GET['licenseType'] == $value)?' selected':'').' >'.$value.'</option>'; } } ?></select> 

Я зарегистрировал свой запрос_vars

  add_filter( 'query_vars', 'software_register_query_vars' ); function software_register_query_vars( $vars ) { $vars[] = 'licenseType'; return $vars; } 

и настройте фильтр pre_get_posts

 add_action('pre_get_posts','software_pre_get_posts'); function software_pre_get_posts( $query ) { if ( is_main_query() && $query->get('post_type') == 'uc_software' ) { $query->set('nopaging','true'); $query->set( 'orderby', 'title' ); $query->set( 'order', 'ASC' ); $meta_query = array(); if( !empty( get_query_var( 'licenseType' ) ) ){ $meta_query[] = array( 'key' => 'software_license_type', 'value' => get_query_var( 'licenseType' ), 'compare' => 'LIKE' ); } // ... //I will add more fields here... // ... if( count( $meta_query ) > 1 ){ $meta_query['relation'] = 'AND'; } if( count( $meta_query ) > 0 ){ $query->set( 'meta_query', $meta_query ); } } } 

Когда я просматриваю создаваемый запрос, я вижу

 SELECT wp_125_posts.* FROM wp_125_posts INNER JOIN wp_125_postmeta ON ( wp_125_posts.ID = wp_125_postmeta.post_id ) WHERE 1=1 AND ( ( wp_125_postmeta.meta_key = 'software_license_type' AND wp_125_postmeta.meta_value LIKE '{4d69cec85576e5c23416d1afb6df73c1a4a288f24aff1da852b18ad70b464309}Students{4d69cec85576e5c23416d1afb6df73c1a4a288f24aff1da852b18ad70b464309}' ) ) AND wp_125_posts.post_type = 'uc_software' AND (wp_125_posts.post_status = 'publish' OR wp_125_posts.post_status = 'acf-disabled' OR wp_125_posts.post_status = 'private') GROUP BY wp_125_posts.ID ORDER BY wp_125_posts.post_title ASC 

Что такое случайная строка, которая записывается вместе с моим query_var? Есть ли способ получить мой запрос_var без него? Я вижу то же самое, когда я использую $ _GET ['licenseType'].

Solutions Collecting From Web of "Что такое случайная строка, которую я вижу при использовании get_query_var?"

Это признак наличия % в вашем мета-запросе. Так как символы 4.8.3 % сбрасываются (фактически заменяются полу-случайной строкой) и перед выполнением SQL-запроса должны быть неэкранированы.

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