Вот связанные базы данных:
post_type = car post_type = engine
У одного автомобиля может быть 1 или больше двигателей. Теперь подумайте, как добавить фильтр в админ-зону, который будет фильтроваться в двигателе автомобилями. Например, у меня есть 4 сообщения с двигателями, что сообщения пересылаются с автомобилями, например:
Engine 01 is assigned to car1 Engine 02 is assigned to car1 Engine 03 is assigned to car2 Engine 04 is assigned to car3
Поэтому, когда я буду фильтровать Engine 01
post car1
а car2
будет показывать – это правильно .
Но проблема в том, что в моем списке фильтров у меня будет только 1 вызов для записи Engine 01
а остальные двигатели пропали.
Вот мой код:
add_action('restrict_manage_posts', 'innp_adminfiltes'); function innp_adminfiltes() { //Add filter by market in post type: markets if($post_type == "engine") { $engine_filter_args = array( 'post_type' => 'car', 'meta_key' => 'engine_assigned_car', 'order' => 'ASC', 'orderby' => 'engine_assigned_car' 'posts_per_page' => -1, 'relation' => 'AND', array( 'post_type' => 'engine', 'meta_key' => 'title', 'type' => 'string' ), ); $query_brieg = new WP_Query($engine_filter_args); //only add filter to post type you want ?> <select name="ADMIN_FILTER_FIELD_VALUE"> <option value=""><?php _e('All markets ', 'ADMIN_FILTER_FIELD_VALUE'); ?></option> <?php foreach($query_brieg->posts as $post) { $engine_ID = (int)get_post_meta($post->ID, 'engine_assigned_car', true); //echo "<option value=\"$post->ID\">$post->post_name</option>"; if ($_GET['ADMIN_FILTER_FIELD_VALUE'] == $engine_ID) { $selected = 'selected'; } else { $selected = ''; } echo '<option value="' . $engine_ID . '" '.$selected.'>' . get_the_title($engine_ID) . '</option>'; } ?> </select> <?php } wp_reset_postdata(); }
И вот запрос:
add_filter( 'parse_query', 'wpse45436_posts_filter' ); function wpse45436_posts_filter( $query ){ global $pagenow; global $post; global $query2; $query2 = $query; if ( 'events' == $post->post_type && isset($_GET['ADMIN_FILTER_FIELD_VALUE']) && $_GET['ADMIN_FILTER_FIELD_VALUE'] != '') { $query->query_vars['meta_key'] = 'events_assigned_market'; $query->query_vars['meta_value'] = $_GET['ADMIN_FILTER_FIELD_VALUE']; } wp_reset_postdata(); }
Есть идеи?