I have a custom taxonomy filter that will filter all the pages in the selected taxonomy. I would like the code to select the pages in that taxonomy, and the children of thous pages.
Heres the 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;
}
EDIT
Here is my Custom Post Type and Taxonomy 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 );
}
This hooks into the update action for any post. It’ll copy all terms for a given set of taxonomies from a parent to it’s children.
Note the last line of the inner
foreach
loop – if you only haveTop Level Parent => Children
, and notParent => Child => Grandchild
, I highly recommend removing the following line;It’s a recursive situation, that will loop over children and run the same process, continuing to iterate until the whole tree has been processed.