Taxonomie filtern alle Kinder

Ich habe einen benutzerdefinierten TaxonomieFilter, der alle Seiten in der ausgewählten Taxonomie filtert. Ich möchte, dass der Code die Seiten dieser Taxonomie und die Kinder von tausend Seiten auswählt.

Heres der Code.

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; } 

BEARBEITEN

Hier ist meine benutzerdefinierte Post-Typ und Taxonomie-function

 /* 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 ); } 

Solutions Collecting From Web of "Taxonomie filtern alle Kinder"

Dadurch wird die Aktualisierungsaktion für jeden Post aktiviert. Es kopiert alle Begriffe für einen gegebenen Satz von Taxonomien von einem Elternteil zu seinen Kindern.

 /** * 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 ); 

Beachten Sie die letzte Zeile der inneren foreach Schleife – wenn Sie nur Top Level Parent => Children und nicht Parent => Child => Grandchild , empfehle ich dringend, die folgende Zeile zu entfernen;

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

Es ist eine rekursive Situation, die sich über Kinder dreht und den gleichen process ausführt, wobei sie weiter iteriert, bis der gesamte Baum verarbeitet wurde.