Intereting Posts
Настроить определенную RSS-ссылку Как я могу сделать подсветку синтаксиса для файлов, включенных в специальный короткий код? Какое действие / крючок нужно мне зарегистрировать, чтобы иметь доступ к редактированию интерфейса плагина? Перенаправление DNS без нарушения всего Как добавить метку «Автор» / «Роль» рядом с комментариями автора сообщения? Правильно ли изменить внешний вид страницы через виджет? Невозможно установить новые плагины из-за ошибки «Не удалось создать каталог» Пользовательский текст в header.php как страница поля редактирования Управление имитатором темы Для загрузки страницы требуется конечный «/» Display_rows () и column_cb () странное поведение Почему канонический элемент ссылки не используется для всех страниц? Как изменить шрифты в теме Twenty Thirteen? Как правильно дезинфицировать строки без $ wpdb-> подготовить? WordPress запрещает изменение страницы на определенную постоянную ссылку

Предварительная таксономия Pre_get_post в сочетании с настраиваемыми полями?

Поэтому у меня есть функция ниже, чтобы фильтровать сообщения с помощью пользовательских терминов и настраиваемых полей. Пользовательский фильтр таксономии работает хорошо. Пользовательский полевой фильтр также работает, что меня действительно шокировало, так как у меня нет опыта на этом уровне. Мой вопрос: я использую 'compare'=>'LIKE', для моих настраиваемых полей, и мне было интересно, если это лучший способ отфильтровать сообщения, основанные на значениях CF. В основном я хотел бы знать, является ли функция ниже правильной способ фильтрации сообщений, используя функцию pre_get_posts. Любые идеи очень ценятся!

У меня есть специальные поля, подобные этому в моей базе данных:

 Key: app_customers | Value: a:2:{i:0;s:11:"Private";i:1;s:8:"Business";} key: app_utilities | Value: a:4:{i:0;s:12:"Own studio";i:1;s:14:"Mobile studio";i:2;s:9:"Makeup Artist";i:3;s:22:"Digital photo editing";} 

Ниже моего кода для фильтрации.

 <?php add_action( 'pre_get_posts', 'rt_tax_archive' ); function rt_tax_archive($query) { if (is_admin()) { return; /* If we're in the admin panel - drop out */ } global $wp_query; if ($query->is_main_query() && isset($_GET['ls'])) { //Get value $rt_cat_id = $_GET['listing_cat']; $rt_term_id_country = $_GET['listing_country']; $rt_field_id_customers = $_GET['listing_customers']; $rt_field_id_utilities = $_GET['listing_utilities']; //filter custom terms //Category filter if (isset($rt_cat_id) && !empty($rt_cat_id[0])) { $tax_query[] = array( 'taxonomy' => 'listing_category', 'field' => 'id', 'terms' => array($rt_cat_id[0]), ); } //country filter if (empty($_GET['listing_country']) && isset($rt_term_id_country) && !empty($rt_term_id_country[0])) { $tax_query[] = array( 'taxonomy' => 'listing_country', 'field' => 'id', 'terms' => array($rt_term_id_country[0]), ); } //Filter custom fields //Customers if (isset($rt_field_id_customers) && !empty($rt_field_id_customers[0])) { $meta_query[] = array( 'key'=>'app_customers', 'value'=>$rt_field_id_customers[0], 'compare'=>'LIKE', ); } //utilities if (isset($rt_field_id_utilities) && !empty($rt_field_id_utilities[0])) { $meta_query[] = array( 'key'=>'app_utilities', 'value'=>$rt_field_id_utilities[0], 'compare'=>'LIKE', ); } //Set query only once per filter, to do proper filtering $query->set('tax_query', $tax_query); $query->set('meta_query', $meta_query); } } ?>