I have created a Custom Post type called “Ad” I then have a taxonomy under that called “type” I have added some terms in the Type category called “Radio”, “TV”, “Print”.
I would like WordPress to use a different single.php
template for each term. I would like to have a Radio template that is different than the Print template.
I have tried taxonomy-ad-type-radio.php
I have tried single-ad-type-radio.php
and every other form of those. Can someone tell me what’s the best way to accomplish this?
I have added filters to my functions.php
file to no avail also. I know I am just missing something very easy. Thanks so much for your help.
<?php
/** Register the post type for the ads **/
add_action( 'init', 'register_cpt_ad' );
function register_cpt_ad() {
$labels = array(
'name' => _x( 'Ads', 'ad' ),
'singular_name' => _x( 'ad', 'ad' ),
'add_new' => _x( 'Add New', 'ad' ),
'add_new_item' => _x( 'Add New ad', 'ad' ),
'edit_item' => _x( 'Edit ad', 'ad' ),
'new_item' => _x( 'New ad', 'ad' ),
'view_item' => _x( 'View ad', 'ad' ),
'search_items' => _x( 'Search Ads', 'ad' ),
'not_found' => _x( 'No ads found', 'ad' ),
'not_found_in_trash' => _x( 'No ads found in Trash', 'ad' ),
'parent_item_colon' => _x( 'Parent ad:', 'ad' ),
'menu_name' => _x( 'Ads', 'ad' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => false,
'description' => 'Adbank system',
'supports' => array( 'title', 'excerpt', 'editor', 'thumbnail', 'custom-fields' ),
'taxonomies' => array( 'category', 'type', 'campaign', 'post_tag' ),
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'has_archive' => true,
'query_var' => true,
'menu_position' => 3,
'can_export' => true,
'rewrite' => true,
'capability_type' => 'post'
);
register_post_type( 'ad', $args );
}
/**Register the taxonomy for the ad types**/
add_action( 'init', 'register_taxonomy_type' );
function register_taxonomy_type() {
$labels = array(
'name' => _x( 'Ad Type', 'type' ),
'singular_name' => _x( 'Ad Types', 'type' ),
'search_items' => _x( 'Search Ad Type', 'type' ),
'popular_items' => _x( 'Popular Ad Type', 'type' ),
'all_items' => _x( 'All Ad Type', 'type' ),
'parent_item' => _x( 'Parent Ad Types', 'type' ),
'parent_item_colon' => _x( 'Parent Ad Types:', 'type' ),
'edit_item' => _x( 'Edit Ad Types', 'type' ),
'update_item' => _x( 'Update Ad Types', 'type' ),
'add_new_item' => _x( 'Add New Ad Types', 'type' ),
'new_item_name' => _x( 'New Ad Types', 'type' ),
'separate_items_with_commas' => _x( 'Separate ad type with commas', 'type' ),
'add_or_remove_items' => _x( 'Add or remove ad type', 'type' ),
'choose_from_most_used' => _x( 'Choose from the most used ad type', 'type' ),
'menu_name' => _x( 'Ad Type', 'type' ),
);
$args = array(
'labels' => $labels,
'public' => true,
'show_in_nav_menus' => true,
'show_ui' => true,
'show_tagcloud' => true,
'hierarchical' => true,
'rewrite' => true,
'query_var' => true
);
register_taxonomy( 'type', array('ad'), $args );
}
/**Register the taxonomy for the campaigns**/
add_action( 'init', 'register_taxonomy_campaign' );
function register_taxonomy_campaign() {
$labels = array(
'name' => _x( 'Campaigns', 'campaign' ),
'singular_name' => _x( 'Campaign', 'campaign' ),
'search_items' => _x( 'Search campaigns', 'campaign' ),
'popular_items' => _x( 'Popular campaigns', 'campaign' ),
'all_items' => _x( 'All campaigns', 'campaign' ),
'parent_item' => _x( 'Parent Campaign', 'campaign' ),
'parent_item_colon' => _x( 'Parent Campaign:', 'campaign' ),
'edit_item' => _x( 'Edit Campaign', 'campaign' ),
'update_item' => _x( 'Update Campaign', 'campaign' ),
'add_new_item' => _x( 'Add New Campaign', 'campaign' ),
'new_item_name' => _x( 'New Campaign', 'campaign' ),
'separate_items_with_commas' => _x( 'Separate campaigns with commas', 'campaign' ),
'add_or_remove_items' => _x( 'Add or remove campaigns', 'campaign' ),
'choose_from_most_used' => _x( 'Choose from the most used campaigns', 'campaign' ),
'menu_name' => _x( 'Campaigns', 'campaign' ),
);
$args = array(
'labels' => $labels,
'public' => true,
'show_in_nav_menus' => true,
'show_ui' => true,
'show_tagcloud' => true,
'hierarchical' => true,
'rewrite' => true,
'query_var' => true
);
register_taxonomy( 'campaign', array('ad'), $args );
}
function query_post_type($query) {
$post_types = get_post_types();
if ( is_category() || is_tag()) {
$post_type = get_query_var('ad');
if ( $post_type ) {
$post_type = $post_type;
} else {
$post_type = $post_types;
}
$query->set('post_type', $post_type);
return $query;
}
}
add_filter('pre_get_posts', 'query_post_type');
/* NEW STUFF */
// Register the column
function price_column_register( $columns ) {
$columns['level'] = __( 'User Level', 'my-plugin' );
return $columns;
}
add_filter( 'manage_edit-ad_columns', 'price_column_register' );
// Display the column content
function price_column_display( $column_name, $post_id ) {
if ( 'level' != $column_name )
return;
$roles = get_post_meta( $post->ID, '_members_access_role', true );
if ($roles == 'level1') echo 'level1';
echo 'hello';
}
add_action( 'manage_posts_custom_column', 'price_column_display', 10, 2 );
/**
* Append the terms of multiple taxonomies to the list
* of classes generated by post_class().
*
* @since 2010-07-10
* @alter 2012-01-06
*/
function mysite_post_class( $classes, $class, $ID ) {
$taxonomies = array(
'type',
'campaign',
);
$terms = get_the_terms( (int) $ID, $taxonomies );
if ( is_wp_error( $terms ) || empty( $terms ) )
return $classes;
foreach ( (array) $terms as $term ) {
if ( ! in_array( $term->slug, $classes ) )
$classes[] = $term->slug;
}
return $classes;
}
add_filter( 'post_class', 'mysite_post_class', 10, 3 );
add_filter( 'tpicker_taxonomies', 'my_tpicker_taxonomies' );
function my_tpicker_taxonomies( $old_taxies) { // Filter taxonomy order
foreach( array("Categories ", "Campaigns ", "Ad Type " ) as $tax_label) {
$new_taxies[$tax_label] = $old_taxies[$tax_label];
}
return $new_taxies;
}
I think your are missing some concepts or not fully understanding.
single
template files are used for the view of a single post. You can make a different single template for each post type, even for each individual post.taxonomy-{your_taxonomy}-{term}.php
, in your case, it would be for exampletaxonomy-type-radio.php
. This template will show all posts within the term radio of the ‘type’ taxonomy.I think what you really want is to use a different
single
template based on the term of the taxonomy “type” associated to a ‘Ad’ post. I assume only one term of ‘type’ taxonomy can be selected per post. You can use template_include filter, or more specifically, the single_template filter:Put this in the functions.php file of your theme. Don’t forget to create the single-*.php for each term (single-radio.php, single-tv.php, etc).
If you don’t need a full template file and only need small modifications, like differents CSS classes, you can check if the post has the term and assign a diferrent class. For exmaple, in a common single template:
Or