/ Сайтостроение / Wordpress / Выводим записи у которых нет миниатюры

Выводим записи у которых нет миниатюры

26.11.2016

907

Иногда нужно вывести все записи в которых отсутствуют миниатюры. Например, для интернет-магазина с множеством товаров. Сделаем это!

Создаем страницу вывода

Создадим шаблон страницы none-img.php, вначале обязательно прописываем название шаблона:

<?php /*Template Name: Записи без миниатюр*/ ?>

После этого создаем страницу Записи без миниатюр и выбираем шаблон Записи без миниатюр (который мы создали).

Вывод записей без миниатюр

Фактически мы выводим все записи интересующего нас типа и после этого прогоняем через условие Есть ли миниатюра? и если миниатюры нет — выводим заголовок с ссылкой на запись

<?php
global $post;
$args = array(
'posts_per_page' => -1,
'post_type' => array('post','city')
);
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post); ?>

<?php if( !has_post_thumbnail() ): ?>

<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>

<?php endif; ?>

<?php endforeach; ?>
<?php wp_reset_postdata() ?>

В данном примере мы запрашиваем типы записей: post (стандартный тип) и city (пользовательский тип).
Если нужно проверять только один тип записи, то можно прописать так: ‘post_type’ => ‘product’ (для товаров woocommerce).
Если нужно проверять стандартные записи, можно это строку вообще убрать..

Счетчик записей

Как посчитать количество записей без миниатюры. Стандартный способ echo count($myposts); не актуален, т.к. он покажет количество записей во всем массиве без проверки на наличие миниатюры

Посчитать записи можно так:

<?php
global $post;
$args = array(
'posts_per_page' => -1,
'post_type' => 'product'
);
$myposts = get_posts( $args );

$i = 0; //начальный показатель счетчика

foreach( $myposts as $post ) : setup_postdata($post); ?>

<?php if( !has_post_thumbnail() ): ?>

<?php $i++; //добавляем +1 к счетчику ?>

<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>

<?php endif; ?>

<?php endforeach; ?>

Всего <?php echo $i; //выводим показания счетчика ?> записей без миниатюры.

<?php wp_reset_postdata() ?>

Бонус: Выводим товары без категорий

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

<?php
global $post;
$terms = get_terms( 'product_cat', array('hide_empty' => 0) );
foreach( $terms as $term ) {

$termsids[] = $term->term_id; //Создаем массив

}

$args = array(
'post_type' => 'product',
'posts_per_page' => -1,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'product_cat',
'field' => 'term_id',
'terms' => $termsids,
'operator' => 'NOT IN'
),
)

);

$myposts = get_posts( $args );

$i = 0;

foreach( $myposts as $post ) : setup_postdata($post); ?>

<?php $i++; ?>

<h5><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h5>

<?php endforeach; ?>

Всего <?php echo $i; ?> записей без категории.

<?php wp_reset_postdata() ?>

Существует еще один более простой способ обнаружения товаров без категорий: В админке в меню Товары у каждого товара есть колонка Категория, если она не заполнена то категория данному товару не назначена. Более того товары без категории можно отфильтровать: в самом низу списка категорий есть строка Без категорий.

Оставляем на сайте только определенные категории

Небольшая предыстория: синхронизировали сайт с 1С, но из 6500 наименований, на сайте должны были отображаться лишь 350).

// Выводим только определенные группы товаров
function custom_pre_get_posts_query( $q ) {
	if( !is_admin() ) {
		global $post;
		$terms = array(132,133,141,135,136,137,138,78);
		$tax_query = (array) $q->get( 'tax_query' );
		$tax_query[] = array(
			'taxonomy' => 'product_cat',
			'field' => 'term_id',
			'terms' => $terms,
			'operator' => 'IN'
		);
		$meta_query[] = array(
			'key' => '_stock_status',
			'value' => 'instock'
		);
		$q->set( 'tax_query', $tax_query );
		$q->set( 'meta_query', $meta_query );
	}
}
add_action( 'woocommerce_product_query', 'custom_pre_get_posts_query' );

$terms — массив необходимых категорий товаров.

Также в этом решении указано выводить только товары со статусом наличия instock, потому как у части товара статус был onbackorder. Статус onbackorder загадочным образом приходил из 1С, и массовое изменение статуса его не меняло. При этом onbackorder был только некоторых товаров, наличие у которых было равно 0, поэтому я решил вовсе их не выводить.

При данном способе корректировки вывода товаров перестает функционировать фильтр по цене

Тэги:

Поделится информацией с друзьями

  • Похожие записи
  • Комментарии
  • Вложения
Миниатюра — фон сайта

Миниатюра — фон сайта

Мы можем использовать миниатюру записи для самых разных целей. В данной статье рассмотрим вариант использовать миниатюру в виде фонового изображения сайта. Вывод миниатюры в виде фона В цикл вывода миниатюры Читать далее »

/
Выравнивание миниатюр товаров

Выравнивание миниатюр товаров

Идеальная ситуация, когда мы загружаем изображения для товаров (хотя бы для главного изображения) квадратными. т.е. заранее подготовленными, откадрированными. Но бывают случаи, когда на сайт начинают заливаться изображения разных пропорций. Сделаем Читать далее »

/
Галерея изображений в виде карусели

Галерея изображений в виде карусели

Нужно переделать стандартное представление галереи изображений в карточке товара. Сделаем данный функционал более похожим на привычный в виде карусели. Для этого подключаем функционал карусели slick, и создать скрипт инициализации $(document).ready(function() Читать далее »

/

Добавить комментарий

Пока нет комментариев. Будь первым!

Выводим записи у которых нет миниатюры
Аккордеон jquery
Рекомендации для васАккордеон jqueryOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.