Как рендерить шаблон с помощью shortcode?

Доброго времени суток,
Помогите, пожалуйста, разобраться с short code.
Суть вопроса такова.
Есть плагин с кастомным типом записей, хочется выводить эти записи в статическую страницу(знаю, что не правильно, но хозяин барин). Для выполнения этого решил использовать shortcode.
На данный момент использую вот такой код примера:
function show_posts_by_taxonomies($taxonomies=''){
    $args = .....
    // The Query
    query_posts( $args );

    echo '<ul>';
    while ( have_posts() ) : the_post();
        echo '<li>';
        the_title();
        echo '</li>';
    endwhile;
    echo '</ul>';

    wp_reset_query();
}
add_shortcode( 'show_rectangle', 'show_posts_by_taxonomies' );

Как заставить эту функцию обращаться к файлу шаблона?(очень не хочется тулить всю хтмл структуру в файл с функциями).

И подвопрос.
Чтобы запретить вывод отдельного поста и категории данного типа использую такой код в шаблоне поста и категории, правильный ли это подход, если нет, то как сделать правильно?
status_header( 404 );
    nocache_headers();
    include( get_query_template( '404' ) );
    die();
 ?>


Заранее спасибо
  • Вопрос задан
  • 104 просмотра
Пригласить эксперта
Ответы на вопрос 1
cesnokov
@cesnokov
<head>&nbsp;</head>
Пропробуйте так:
function show_posts_by_taxonomies( $atts ){
	$xhtml = '';
	extract( shortcode_atts( array(
		'taxonomies' => '',   
	), $atts ) );
	if ($taxonomies == '') { return; }

	$taxonomies_query = new WP_Query( array( 	
		'post_type' => array( $taxonomies ),
		'posts_per_page' => -1,
	));
	
	$xhtml .= '<ul>';
	while ( $taxonomies_query->have_posts() ) : $taxonomies_query->the_post();
		$xhtml .= '<li>' .get_the_title( get_the_ID() ) . '</li>';
	endwhile;
	wp_reset_postdata();

	$xhtml .= '</ul>';
	return $xhtml;
}
add_shortcode( 'show_rectangle', 'show_posts_by_taxonomies' );


Вызвать эту функцию можно из поста шорт-кодом:
[show_rectangle taxonomies="my_custom_post_type"]

Из PHP кода шаблона вызывается так:
echo do_shortcode( '[show_rectangle taxonomies="my_custom_post_type"]' );
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы