Intereting Posts
Добавление URL страницы в таблицу администраторов страниц Установите meta_key и meta_value для всех зарегистрированных пользователей в WordPress с помощью SQL-запроса WordPress Media Manager – ограничение определенного типа mime Как передать параметр поиска $ _GET на новую страницу пользовательского поиска? Новый элемент «Пользовательские типы» в меню администратора. Это плагин или новая функция wordpress? Фильтрация содержимого плагина WordPress AMP с настраиваемыми полями Получить прикрепленное изображение для отображения в панели управления администратора Могу ли я иметь один сайт WordPress для двух тем (один для ПК для мобильных телефонов) Условия таксономии поиска, а не сообщения update_post_meta из данных в многомерном массиве, созданных из формы Форма поиска WordPress Issue | Ошибка ввода URL-адреса. | Указание на неправильный URL Изменение часового пояса Locked Me Out? Плагин PHP написать разрешения Переключить заголовок «Сократить» get_image_tag () html output: пустой атрибут src

Таксономия фильтрует всех детей

У меня есть пользовательский фильтр таксономии, который будет фильтровать все страницы в выбранной таксономии. Я хотел бы, чтобы код выбирал страницы в этой таксономии, а дети тысяч страниц.

Вот код.

add_action('restrict_manage_posts', 'restrict_manage_posts_section'); function restrict_manage_posts_section() { global $post_type; if ( is_object_in_taxonomy( $post_type, 'section' ) ) { $dropdown_options = array( 'show_option_all' => __( 'View all sections' ), 'hide_empty' => 0, 'hierarchical' => 1, 'name' => 'section', 'show_count' => 0, 'taxonomy' => 'section', 'orderby' => 'name', 'selected' => $cat ); add_filter('wp_dropdown_cats', 'wp_dropdown_section_filter', 10); wp_dropdown_categories( $dropdown_options ); remove_filter('wp_dropdown_cats', 'wp_dropdown_section_filter', 10); } } function wp_dropdown_section_filter($select) { $terms = get_terms('section', array('hide_empty' => false)); foreach( $terms as $term ) { $select = str_replace('value="'.$term->term_id.'"', 'value="'.$term->slug.'"', $select); if (isset($_GET['section']) && $term->slug == $_GET['section']){ $select = str_replace('value="'.$term->slug.'"', 'value="'.$term->slug.'" selected', $select); } } return $select; } 

РЕДАКТИРОВАТЬ

Вот мой пользовательский тип сообщения и функция таксономии

 /* Register Custom Post Type and Taxonomy ---------------------------------------------------*/ add_action('init', 'register_module_type'); function register_module_type() { $labels = array( 'name' => _x('Modules', 'post type general name'), 'singular_name' => _x('Modules', 'post type singular name'), 'add_new' => _x('Add Module', 'module item'), 'add_new_item' => __('Add Module'), 'edit_item' => __('Edit Module'), 'new_item' => __('New Module'), 'view_item' => __('View Module'), 'search_items' => __('Search Module'), 'not_found' => __('Nothing found'), 'not_found_in_trash' => __('Nothing found in Trash'), 'parent_item_colon' => '' ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'module', 'with_front' => false ), 'capability_type' => 'post', 'hierarchical' => true, 'has_archive' => true, 'can_export' => true, 'menu_position' => null, 'supports' => array('title','editor','thumbnail',/*'excerpt',*/'revisions','custom-fields','post-formats'/*,'page-attributes'*/) #'taxonomies' => array('category', 'post_tag') ); register_post_type( 'module' , $args ); #register_taxonomy_for_object_type('category', 'testimonial'); #register_taxonomy_for_object_type('post_tag', 'testimonial'); $labels = array( 'name' => _x( 'Sections', 'taxonomy general name' ), 'singular_name' => _x( 'Section', 'taxonomy singular name' ), 'search_items' => __( 'Search Sections' ), 'all_items' => __( 'All Sections' ), 'parent_item' => __( 'Parent Section' ), 'parent_item_colon' => __( 'Parent Section:' ), 'edit_item' => __( 'Edit Section' ), 'update_item' => __( 'Update Section' ), 'add_new_item' => __( 'Add New Section' ), 'new_item_name' => __( 'New Section Name' ), ); register_taxonomy( 'section', array( 'module' ), array( 'hierarchical' => true, 'labels' => $labels, 'show_ui' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'section' ), )); #add_theme_support( 'post-formats', array( 'chat','aside','gallery','link','image','quote','status','video' )); flush_rewrite_rules( false ); } 

Это перехватывает действие обновления для любого сообщения. Он скопирует все условия для определенного набора таксономий от родителя к его детям.

 /** * Update all children of a post with the same terms as itself. * * @param int $post_ID * @param object $post */ function __update_children_with_terms( $post_ID, $post ) { global $wpdb; // array of taxonomies to be copied to children, if the post type supports it $taxonomies = array( 'section' ); if ( ! is_post_type_hierarchical( $post->post_type ) ) return; // bail // all child IDs for current post $children = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_parent = " . ( int ) $post_ID ); // loop over each taxonomy for the current post type foreach ( get_object_taxonomies( $post->post_type ) as $taxonomy ) { if ( ! in_array( $taxonomy, $taxonomies ) ) continue; // bail, term copy not supported for this tax if ( ! $terms = wp_get_object_terms( $post_ID, $taxonomy, array( 'fields' => 'ids' ) ) ) continue; // bail, no terms for this tax // essential, otherwise wp_set_object_terms treats them as strings and creates new terms! $terms = wp_parse_id_list( $terms ); // loop over children and append the terms foreach ( $children as $child ) { wp_set_object_terms( $child, $terms, $taxonomy, true ); // this will rescursively iterate down the tree but at a cost!! // remove it if you only need parent => direct child copying wp_update_post( array( 'ID' => ( int ) $child ) ); } } } add_action( 'wp_insert_post', '__update_children_with_terms', 10, 2 ); 

Обратите внимание на последнюю строку внутреннего цикла foreach – если у вас есть только Top Level Parent => Children , а не Parent => Child => Grandchild , я настоятельно рекомендую удалить следующую строку;

 wp_update_post( array( 'ID' => ( int ) $child ) ); 

Это рекурсивная ситуация, которая будет перебирать детей и запускать один и тот же процесс, продолжая итерацию до тех пор, пока все дерево не будет обработано.