raselgit
@raselgit
Веб-дизайнер

Как сделать универсальную функцию для вывода записей?

Есть функция, которая выводит все записи из данного типа:
$args = array(
	'post_type'      => 'works',
	'numberposts'    => -1
);
$lastposts = get_posts( $args );
foreach( $lastposts as $post ){ setup_postdata($post);
	get_template_part( 'works-item' );
}
wp_reset_postdata();

Как доработать эту функцию так, чтобы на странице категории автоматически выводились записи из этой категории?
  • Вопрос задан
  • 161 просмотр
Решения вопроса 2
MedVedar
@MedVedar
e-commerce developer
Примерно так (писал по памяти, так что возможны ошибки):

$term      = get_queried_object();
$term_slug = $term->slug;
$_posts    = new WP_Query( array(
	'post_type'      => 'works',
	'posts_per_page' => 10,
	'tax_query'      => array(
		array(
			'taxonomy' => 'category', // или вашу таксономию
			'field'    => 'slug',
			'terms'    => $term_slug,
		),
	),
) );
if ( $_posts->have_posts() ) :
	while ( $_posts->have_posts() ) :
		$_posts->the_post();
                get_template_part( 'works-item' );
	endwhile;
endif;
wp_reset_postdata();
Ответ написан
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
По результатам обсуждения в комментах и корректировки кода от Max Medar :

$tax_query = false;

$term = get_queried_object();
if ( $term instanceof WP_Term ) {
    $tax_query = array(
        array(
            'taxonomy' => 'works-cat',
            'field' => 'slug',
            'terms' => $term->slug,
        ),
    );
}

$_posts  = new WP_Query( array(
    'post_type' => 'works',
    'posts_per_page' => 50,
    'tax_query' => $tax_query,
) );

while ( $_posts->have_posts() ) : $_posts->the_post();
	get_template_part( 'works-item' );
endwhile;
wp_reset_postdata();
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
По умолчанию в функцию передаётся 'category' => 0, следовательно добавьте в вашу функцию необязательный параметр $category = 0, и установите значение в ваш массив аргументов:
$args['category'] = $category;
Ответ написан
Ваш ответ на вопрос

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

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