WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Самая быстрая Тема-конструктор для WordPress

Вывод новостей по меткам!

Доброго времени суток!

Кто знает, как вывести новости по меткам? Я вывел новости по рубрике, а вот вывести по тегам вообще не получается, подскажите пожалуйста какой функцией вывести?

Спасибо!

0
Гость
5.2 лет назад
  • 1
    campusboy3616 www.youtube.com/c/wpplus

    Используйте get_tags или get_terms. И в связке к ним get_posts для получения самих новостей.

    Alex 5.2 лет назад

    Спасибо!
    Подскажите пожалуйста как правильно прописать связку, я вывожу категории следующим кодом:

    <?php 
    $category = get_the_category();
    rsort($category);
    $cat_add_id = $category[0]->term_id;
    $real_id = get_the_ID();                
    
    $args = array('cat' =>$cat_add_id);
    $posts = get_posts($args);
    
    foreach( $posts as $post ){
    	setup_postdata($post);
    	if ($post->ID <> $real_id){
    	?>
    	<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <?php
    	}
    }
    wp_reset_postdata();
    ?>

    Как и куда мне вставить get_tags или get_terms?
    Заранее большое человеческое спасибо!

    campusboy 5.2 лет назад

    Вы объясните точнее, в каком месте Вы выводите? На главной, на странице категорий или архивов, на странице тега и в самой новости? Ну ё-моё smile Вот есть код, который подбирает "Похожие новости" на основе тегов:

    <?php 
    	$tags = wp_get_post_tags($post->ID);
    	if ($tags) {
    		 $tag_ids = array();
    		 foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;
    		 $args=array(
    		 'tag__in' => $tag_ids, // Сортировка происходит по тегам (меткам)
    		 'orderby'=>rand, // Добавляем условие сортировки рандом (случайный подбор)
    		 'caller_get_posts'=>1, // Запрещаем повторение ссылок
    		 'post__not_in' => array($post->ID),
    		 'showposts'=>6 // Цифра означает количество выводимых записей
    		 );
    		 $my_query = new wp_query($args);
    		 if( $my_query->have_posts() ) {
    			while ($my_query->have_posts()) {
    					$my_query->the_post();
    				?>
    
    					<a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"></a>
    
    				<?php
    			}
    		}
    		 wp_reset_query();
    	}
    ?>

    Чем больше Вы тегов записям своих прописываете, тем точнее он выводит результаты

    Alex 5.2 лет назад

    Извинитеsmile
    Я вывожу новости в archive.php, мне бы не похожие, а конкретные, по ID тега, баловался с этим кодом, что-то вообще ничего не получается, пустое место вместо новостей.
    Подскажите пожалуйста!smile

    campusboy 5.2 лет назад

    Знаете я ничего не пойму? Почему надо придумывать какой-то код. Берем обычную тему, которая поставляется WP под названием classic. В ней ничего нет лишнего, самое основное. Итак, к примеру, переходим в категорию "Движки сайтов" и нам отображаются все материалы, типа Вордпресс, Джумла, , DLE, Битрикс и так далее. Переходим в какую-нибудь метку, к примеру "Бесплатные движки" и нам теперь отображаются только посты с этой меткой, а именно записи Вордпресс и Джумла. В чем секрет? А нет секрета, это всё выводит обычный цикл WP, он сам знает, что это страница Рубрика такой-то, надо выводить материалы к ней относящиеся, а это страница Меток, надо выводит записи с этой меткой, а если это архив за 2013 год, то записи этого года. Никаких хитровыдуманных запросов smile Вот код простого странички index.php, которая используется везде. И Для вывода записей по меткам, по рубрикам, просто запись, страница, архив. Эдакий комбайн.

    <?php
    /**
     * @package WordPress
     * @subpackage Classic_Theme
     */
    get_header();
    ?>
    
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    
    <?php the_date('','<h2>','</h2>'); ?>
    
    <div <?php post_class() ?> id="post-<?php the_ID(); ?>">
    	 <h3 class="storytitle"><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h3>
    	<div class="meta"><?php _e("Filed under:"); ?> <?php the_tags(',') ?> — <?php the_tags(__('Tags: '), ', ', ' — '); ?> <?php the_author() ?> @ <?php the_time() ?> <?php edit_post_link(__('Edit This')); ?></div>
    
    	<div class="storycontent">
    		<?php the_content(__('(more...)')); ?>
    	</div>
    
    	<div class="feedback">
    		<?php the_tags(); ?>
    		<?php comments_popup_link(__('Comments (0)'), __('Comments (1)'), __('Comments (%)')); ?>
    	</div>
    
    </div>
    
    <?php comments_template(); // Get wp-comments.php template ?>
    
    <?php endwhile; else: ?>
    <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
    <?php endif; ?>
    
    <?php posts_nav_link(' — ', __('« Newer Posts'), __('Older Posts »'));*/ ?>
    
    <?php get_footer(); ?>

    Возможно, я снова не понял Вашей цели. Но вот на демо-сайте я загрузил демо-данные и проверил, прекрасно всё работает. Возможно у Вас финтиперсовая тема, которая переписывает переменную wp_query, тогда Да, надо думать, как построить специальный запрос.

    campusboy 5.2 лет назад

    А теперь специфический код для мега случаев smile

    <?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){
    			?>
    			<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br>
    			<?php
    		}
    	}
    	wp_reset_postdata();
    }
    ?>
    Alex 5.2 лет назад

    Большое спасибо! Буду пробоватьsmile

    Александр 8 мес назад

    Alex в чем то я тебя понимаю, это адов ресурс, делать как тут написано смысла нет ничего не работает - это може показаться шизой но это так, на просторах инета нашел более действенный вариант рабочий, вотпример кода:

    global $post;
    $posts = get_posts( array(
    	'numberposts' => 5,
    	'category'    => '',
    	'orderby'     => 'date',
    	'order'       => 'DESC',
    	'include'     => array(),
    	'exclude'     => array(),
    	'meta_key'    => '',
    	'meta_value'  =>'',
    	'post_type'   => 'news',
    	'suppress_filters' => true,)
    );
    
    foreach( $posts as $post ) {
    	setup_postdata($post);
    
    	?>
    
    		<p>
    	<?php echo get_post()->post_content; ?>
    	<br>
    	<?php echo get_post()->post_date; ?>
    	</p>

    смысл глобальный такой - WP устроен таким образом - у него есть настройки и действия с содержимым по умолчанию (стандарт который в нем зашит и который ты видишь в консоли управления после установки WP), а есть возможность вмешиваться и добавлять свои разделы и функционал (важно помнить что в некоторых случаях эти вмешательства изменяют стандартные настройки и параметры а значит после отработки "вмешательства" необходимо сбрасывать к дефолтному состоянию (серия функций wp_reset_имя)). так вот логика такая - чтобы вывести что то созданое тобой то это надо сначала получить (серия фуyкций get_имя() ), а чтобы получить то что надо - нужно это получение настроить (вот тут нюансов много - тянет на отдельную статью), настройка сводится в большинстве случаев к настройке глобальной переменной $post (это понятно в массе своей имеем дело с постами - по русски с записями), смысл настройки - записать в эту переменную массив с набором "ключ" => "значение" (вот какие ключи и значения кое как описаны на данном ресурсе - как это делал я смотри в примере кода). А вот как вывести это все смотри мой пример кода - потому как на этом ресурсе представлена какая то нерабочая лажа (или скорее всего представленные сдесь примеры работают с дефолтными параметрами WP). как нить может получше примеры приведу а мож видосик на ютуб запилю - потому как все волосы на себе выдрал но ничего сделать не получилось при помощи этого сайта.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация