@mozhno

Как вывести статьи рубрики Wordpress?

У меня есть такая задача, выводить на сайте на отдельной странице посты из тегов и из рубрик. Я создал для этого файл tag.php и вставил такой код, он сработал, теперь например на странице tag/rastvoritel выводить все статьи с тегом растворитель
<?php
# Проверяем, это точно ли страница метки, а не категории, архива, страницы или записи.
if( is_tag() ){
    # Получаем с глобального массива данных slug нашей метки
    # К примеру у страницы метки "Новости WP" скорее всего будет slug такой novosti-wp
    $this_tag = $wp_query->queried_object->slug;
    # Получаем все записи со полученным slug'ом в размере 10 штук
    $tags_posts = get_posts( array ('numberposts' => 10, 'tag' => $this_tag) );
    #Данные находятся в массиве, обработаем его, выведя результаты ячеек на экран
    foreach( $tags_posts as $post ){
        setup_postdata($post); # разрешаем получать дополнительные данные
        if ($post->ID <> $real_id){
            ?>
            <div class="stats-items__item">
                    <a href="<?php the_permalink(); ?>" class="stats-items__item-name">
                        <?php the_title(); ?>
                    </a>
                    <?php echo get_the_post_thumbnail() ?>
                    <div class="stats-items__item-bottom">
                        <p class="stats-items__item-bottom__date">
                            <?php the_date( 'j.m.Y'); ?>
                        </p>
                        <div class="stats-items__item-bottom-link">
                            <p>
                                Поделиться ссылкой:
                            </p>
                            <a href="#">
                                <img src="<?php echo get_template_directory_uri(); ?>/img/stats-fk-icon.png" alt="fk">
                            </a>
                            <a href="#">
                                <img src="<?php echo get_template_directory_uri(); ?>/img/stats-vk-icon.png" alt="vk">
                            </a>
                            <a href="#">
                                <img src="<?php echo get_template_directory_uri(); ?>/img/stats-ok-icon.png" alt="ok">
                            </a>
                        </div>
                    </div>
                </div>
            <?php
        }
    }
    wp_reset_postdata();
}
?>

Хочу сделать также только с рубриками, создал файл category.php , туда вставил этот же код, но сделал проверку на категории и почему-то у меня не получается, может что-то нужно добавить или изменить?
<?php
# Проверяем, это точно ли страница метки, а не категории, архива, страницы или записи.
if( is_category() ){
    $this_category = $wp_query->queried_object->slug;
    $tags_categories = get_posts( array ('numberposts' => 10, 'category' => $this_tag) );
    foreach( $categories_posts as $post ){
        setup_postdata($post);
        if ($post->ID <> $real_id){
            ?>
            <div class="stats-items__item">
                    <a href="<?php the_permalink(); ?>" class="stats-items__item-name">
                        <?php the_title(); ?>
                    </a>
                    <?php echo get_the_post_thumbnail() ?>
                    <div class="stats-items__item-bottom">
                        <p class="stats-items__item-bottom__date">
                            <?php the_date( 'j.m.Y'); ?>
                        </p>
                        <div class="stats-items__item-bottom-link">
                            <p>
                                Поделиться ссылкой:
                            </p>
                            <a href="#">
                                <img src="<?php echo get_template_directory_uri(); ?>/img/stats-fk-icon.png" alt="fk">
                            </a>
                            <a href="#">
                                <img src="<?php echo get_template_directory_uri(); ?>/img/stats-vk-icon.png" alt="vk">
                            </a>
                            <a href="#">
                                <img src="<?php echo get_template_directory_uri(); ?>/img/stats-ok-icon.png" alt="ok">
                            </a>
                        </div>
                    </div>
                </div>
            <?php
        }
    }
    wp_reset_postdata();
}
?>
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
init0
@init0
Старый моряк
$tags_categories = get_posts( array ('numberposts' => 10, 'category' => $this_tag) );

Ошибка в query var - заменить 'category' на 'category_name'
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Весь ваш код можно смело удалять. На архивных страницах уже есть глобальный запрос тегов и категорий в переменной $wp_query, второй раз получать его с помощью get_posts() абсолютно не нужно

Кроме того, проверки is_tag() и is_category() так же нужны, т.к. шаблоны tag.php и category.php уже загружаются по этим условиям

Попробуйте посмотреть как делаются популярные или стандартные темы twenty и делать подобным образом. Например, вы можете взять шаблон archive.php темы Twenty Sixteen и переделать верстку под себя, станет значительно лучше

<?php get_header(); ?>

	<div id="primary" class="content-area">
		<main id="main" class="site-main" role="main">

		<?php if ( have_posts() ) : ?>

			<header class="page-header">
				<?php
					the_archive_title( '<h1 class="page-title">', '</h1>' );
					the_archive_description( '<div class="taxonomy-description">', '</div>' );
				?>
			</header><!-- .page-header -->

			<?php
			// Start the loop.
			while ( have_posts() ) :
				the_post();

				get_template_part( 'template-parts/content', get_post_format() );

				// End the loop.
			endwhile;

			// Previous/next page navigation.
			the_posts_pagination(
				array(
					'prev_text'          => __( 'Previous page', 'twentysixteen' ),
					'next_text'          => __( 'Next page', 'twentysixteen' ),
					'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentysixteen' ) . ' </span>',
				)
			);

			// If no content, include the "No posts found" template.
		else :
			get_template_part( 'template-parts/content', 'none' );

		endif; ?>

		</main><!-- .site-main -->
	</div><!-- .content-area -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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