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

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

HIT

26.11.2016

2584

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

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

Создадим шаблон страницы 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, поэтому я решил вовсе их не выводить.

При данном способе корректировки вывода товаров перестает функционировать фильтр по цене
[site-socialshare]
  • Похожие записи
  • Комментарии
  • Вложения
Несколько миниатюр записи

Несколько миниатюр записи

В некоторых случаях необходимо, чтобы у записи было несколько миниатюр. Например, если запись это товар с несколькими изображениями. Добавим эту возможность при редактировании записи. Плагин Multiple Featured Images После установки Читать далее »

/
Атрибуты миниатюры

Атрибуты миниатюры

У миниатюры (thumbnail) есть служебная функция назначения атрибутов. Манипулируя атрибутами можно добиться интересных результатов. Фильтр wp_get_attachment_image_attributes распространяется на миниатюры, а также на вложенные изображения wp_get_attachment_image($image->ID, ‘rectangle’). Как сделать отложенную загрузку Читать далее »

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

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

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

/

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

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

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