Поэтому у меня есть функция ниже, чтобы фильтровать сообщения с помощью пользовательских терминов и настраиваемых полей. Пользовательский фильтр таксономии работает хорошо. Пользовательский полевой фильтр также работает, что меня действительно шокировало, так как у меня нет опыта на этом уровне. Мой вопрос: я использую '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); } } ?>