Hi,
I have read many solutions about filtering custom post type display by taxonomy but they don’t seem to work for me. This support link is the last I tried that did not seem to work
I have 3 custom post types:
- venue (category taxonomy: venue-category, tag taxonomy: venue-tag)
- supplier (category taxonomy: supplier-category)
- price table (category taxonomy: price-table-category)
Here’s my code. Can you tell me how to modify it, if applicable?
function x_shortcode_recent_posts_override( $atts ) {
extract( shortcode_atts( array(
'id' => '',
'class' => '',
'style' => '',
'type' => 'post',
'count' => '',
'category' => '',
'enable_excerpt' => '',
'offset' => '',
'orientation' => '',
'no_image' => '',
'fade' => ''
), $atts, 'x_recent_posts' ) );
$allowed_post_types = apply_filters( 'cs_recent_posts_post_types', array( 'post' => 'post', 'supplier' => 'supplier', 'venue' => 'venue', 'price table' => 'price table' ) );
$type = ( isset( $allowed_post_types[$type] ) ) ? $allowed_post_types[$type] : 'post';
$id = ( $id != '' ) ? 'id="' . esc_attr( $id ) . '"' : '';
$class = ( $class != '' ) ? 'x-recent-posts cf ' . esc_attr( $class ) : 'x-recent-posts cf';
$style = ( $style != '' ) ? 'style="' . $style . '"' : '';
$count = ( $count != '' ) ? $count : 3;
$category = ( $category != '' ) ? $category : '';
//$category_type = ( $type != '' ) ? 'category_name' : 'portfolio-category';
if( $type == 'post' ){
$category_type = 'category_name';
} elseif ($type == 'x-portfolio') {
$category_type = 'portfolio-category';
} elseif ($type == 'supplier') {
$category_type = 'supplier-category';
} elseif ($type == 'venue') {
$category_type = 'venue-category';
}
$offset = ( $offset != '' ) ? $offset : 0;
$orientation = ( $orientation != '' ) ? ' ' . $orientation : ' horizontal';
$no_image = ( $no_image == 'true' ) ? $no_image : '';
$fade = ( $fade == 'true' ) ? $fade : 'false';
$enable_excerpt = ( $enable_excerpt == 'true' ) ? true : false;
$js_params = array(
'fade' => ( $fade == 'true' )
);
$data = cs_generate_data_attributes( 'recent_posts', $js_params );
$output = "<div {$id} class=\"{$class}{$orientation}\" {$style} {$data} data-fade=\"{$fade}\" >";
$q = new WP_Query( array(
'orderby' => 'date',
'post_type' => "{$type}",
'posts_per_page' => "{$count}",
'offset' => "{$offset}",
"{$category_type}" => "{$category}",
''
) );
if ( $q->have_posts() ) : while ( $q->have_posts() ) : $q->the_post();
if ( $no_image == 'true' ) {
$image_output = '';
$image_output_class = 'no-image';
} else {
$image = wp_get_attachment_image_src( get_post_thumbnail_id(), 'entry-cropped' );
$bg_image = ( $image[0] != '' ) ? ' style="background-image: url(' . $image[0] . ');"' : '';
$image_output = '<div class="x-recent-posts-img"' . $bg_image . '></div>';
$image_output_class = 'with-image';
}
$output .= '<a class="x-recent-post' . $count . ' ' . $image_output_class . '" href="' . get_permalink( get_the_ID() ) . '" title="' . esc_attr( sprintf( __( '%s', csl18n() ), the_title_attribute( 'echo=0' ) ) ) . '">'
. '<article id="post-' . get_the_ID() . '" class="' . implode( ' ', get_post_class() ) . '">'
. '<div class="entry-wrap">'
. $image_output
. '<div class="x-recent-posts-content">'
. '<h3 class="h-recent-posts">' . get_the_title() . '</h3>'
. '<span class="x-recent-posts-date">' . get_the_date() . '</span>'
. ( $enable_excerpt ? '<span class="x-recent-posts-excerpt"><p>' . strip_tags( get_the_excerpt() ) . '</p></span>' : '' )
. '</div>'
. '</div>'
. '</article>'
. '</a>';
endwhile; endif; wp_reset_postdata();
$output .= '</div>';
return $output;
}
add_action('init', 'x_overwrite_shortcode');
function x_overwrite_shortcode() {
remove_shortcode( 'x_recent_posts' );
add_shortcode( 'x_recent_posts', 'x_shortcode_recent_posts_override' );
}
function add_event_post_type( $types ) {
$types['supplier'] = 'supplier';
$types['venue'] = 'venue';
$types['price table'] = 'price_table';
return $types;
}
add_filter( 'cs_recent_posts_post_types', 'add_event_post_type', 999 );
Thank you in advance.