Изменить короткий код для работы с настраиваемыми типами сообщений

У меня есть этот shortcode, который отлично работает с сообщениями, но мне нужно его изменить, чтобы принимать аргументы для настраиваемого типа сообщений и пользовательской таксономии.

<?php // [blog_posts] function shortcode_latest_from_blog($atts, $content = null) { $sliderrandomid = rand(); extract(shortcode_atts(array( "posts" => '8', "columns" => '4', "category" => '', "style" => 'text-normal', "image_height" => 'auto', "show_date" => 'true', "excerpt" => 'true', ), $atts)); ob_start(); ?> <div class="row column-slider"> <div id="slider_<?php echo $sliderrandomid ?>" class="iosSlider blog-posts <?php if($style == 'text-overlay') { ?>slider-center-arrows<?php } ?>" style="min-height:<?php echo $image_height; ?>;height:<?php echo $image_height; ?>;"> <ul class="slider large-block-grid-<?php echo $columns ?> small-block-grid-2"> <?php $args = array( 'post_status' => 'publish', 'post_type' => 'post', 'category_name' => $category, 'posts_per_page' => $posts ); $recentPosts = new WP_Query( $args ); if ( $recentPosts->have_posts() ) : ?> <?php while ( $recentPosts->have_posts() ) : $recentPosts->the_post(); ?> <li class="ux-box text-center post-item ux-<?php echo $style; ?>"> <div class="inner"> <div class="inner-wrap"> <a href="<?php the_permalink() ?>"> <div class="ux-box-image"> <div class="entry-image-attachment" style="max-height:<?php echo $image_height; ?>;overflow:hidden;"> <?php the_post_thumbnail('medium'); ?> </div> </div><!-- .ux-box-image --> <div class="ux-box-text text-vertical-center"> <h3 class="from_the_blog_title"><?php the_title(); ?></h3> <div class="tx-div small"></div> <?php if($excerpt != 'false') { ?> <p class="from_the_blog_excerpt small-font show-next"><?php $excerpt = get_the_excerpt(); echo string_limit_words($excerpt,15) . '[...]'; ?> </p> <?php } ?> </div><!-- .post_shortcode_text --> </a> <?php if($show_date != 'false') {?> <div class="post-date"> <span class="post-date-day"><?php echo get_the_time('d', get_the_ID()); ?></span> <span class="post-date-month"><?php echo get_the_time('M', get_the_ID()); ?></span> </div> <?php } ?> </div><!-- .inner-wrap --> </div><!-- .inner --> </li><!-- .blog-item --> <?php endwhile; // end of the loop. ?> <?php endif; wp_reset_query(); ?> </ul> <!-- .slider --> <div class="sliderControlls dark"> <div class="sliderNav small hide-for-small"> <a href="javascript:void(0)" class="nextSlide prev_<?php echo $sliderrandomid ?>"><span class="icon-angle-left"></span></a> <a href="javascript:void(0)" class="prevSlide next_<?php echo $sliderrandomid ?>"><span class="icon-angle-right"></span></a> </div> </div><!-- .sliderControlls --> </div> <!-- .iOsslider --> </div><!-- .row .column-slider --> <?php $content = ob_get_contents(); ob_end_clean(); return $content; } function string_limit_words($string, $word_limit) { $words = explode(' ', $string, ($word_limit + 1)); if(count($words) > $word_limit) array_pop($words); return implode(' ', $words); } add_shortcode("blog_posts", "shortcode_latest_from_blog"); 

Эта часть кода – это то, что определяет аргументы, которые могут быть переданы с помощью короткого кода:

 extract(shortcode_atts(array( "posts" => '8', "columns" => '4', "category" => '', "style" => 'text-normal', "image_height" => 'auto', "show_date" => 'true', "excerpt" => 'true', ), $atts)); 

Это позволит вам использовать эти значения в виде $ posts, $ columns и т. Д. Если в коротком коде не передается значение, будет использоваться значение по умолчанию. В этом случае $ posts = 8 (номера сообщений для показа)

Это запрос, который получает сообщения на основе переданных значений:

 $args = array( 'post_status' => 'publish', 'post_type' => 'post', 'category_name' => $category, 'posts_per_page' => $posts ); 

Итак, если вы хотите иметь возможность выбрать тип сообщения, передав его по короткому коду, вы сделаете что-то вроде:

 extract(shortcode_atts(array( "post_type" => 'post', "posts" => '8', "columns" => '4', "category" => '', "style" => 'text-normal', "image_height" => 'auto', "show_date" => 'true', "excerpt" => 'true', ), $atts)); 

Вы можете изменить запрос, чтобы использовать это значение:

 $args = array( 'post_status' => 'publish', 'post_type' => $post_type, 'category_name' => $category, 'posts_per_page' => $posts ); 

При написании [blog_posts post_type="my_custom_post_type"] вы можете сделать [blog_posts post_type="my_custom_post_type"]

Та же идея может быть реализована с помощью таксономии. Если вы используете только один пользовательский тип сообщения, который никогда не изменится, вы можете пропустить первый шаг и просто изменить запрос напрямую. Также проверьте код, чтобы понять, как работает wp_query, и какие значения он ожидает:

http://codex.wordpress.org/Class_Reference/WP_Query