Отладка, почему избранные изображения перестали отображаться в WooCommerce на главной странице

В какой-то момент «Избранные» изображения, которые обычно показывались на нашей домашней странице, перестали отображаться.

Я сделал некоторые копания и нашел этот код шаблона в index.php (это тема Artificer от WooThemes)

Это, по-видимому, код, который обрабатывает цветные изображения:

<ul class="featured-products"> <!-- The first 3 --> <?php $args = array( 'post_type' => 'product', 'posts_per_page' => 3, 'meta_query' => array( array('key' => '_visibility','value' => array('catalog', 'visible'),'compare' => 'IN'),array('key' => '_featured','value' => 'yes')) ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); $_product; if ( function_exists( 'get_product' ) ) { $_product = get_product( $loop->post->ID ); } else { $_product = new WC_Product( $loop->post->ID ); } ?><li class="featured"> <?php //woocommerce_show_product_sale_flash( $post, $_product ); ?> <a href="<?php echo get_permalink( $loop->post->ID ) ?>" title="<?php echo esc_attr($loop->post->post_title ? $loop->post->post_title : $loop->post->ID); ?>"> <?php if (has_post_thumbnail( $loop->post->ID )) echo get_the_post_thumbnail($loop->post->ID, 'shop_catalog'); else echo '<img src="'.woocommerce_placeholder_img_src().'" alt="Placeholder" />'; ?> <h3><?php the_title(); ?> <span class="price"><?php echo $_product->get_price_html(); ?></span></h3> </a> </li><?php endwhile; ?><!-- the large 1 --><?php $args = array( 'post_type' => 'product', 'posts_per_page' => 1, 'offset' => 3, 'meta_query' => array( array('key' => '_visibility','value' => array('catalog', 'visible'),'compare' => 'IN'),array('key' => '_featured','value' => 'yes')) ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); if ( function_exists( 'get_product' ) ) { $_product = get_product( $loop->post->ID ); } else { $_product = new WC_Product( $loop->post->ID ); } ?><li class="featured"> <?php //woocommerce_show_product_sale_flash( $post, $_product ); ?> <a href="<?php echo get_permalink( $loop->post->ID ) ?>" title="<?php echo esc_attr($loop->post->post_title ? $loop->post->post_title : $loop->post->ID); ?>"> <?php if (has_post_thumbnail( $loop->post->ID )) echo get_the_post_thumbnail($loop->post->ID, 'shop_single'); else echo '<img src="'.woocommerce_placeholder_img_src().'" alt="Placeholder" />'; ?> <h3><?php the_title(); ?> <span class="price"><?php echo $_product->get_price_html(); ?></span></h3> </a> </li><?php endwhile; ?><!-- the last 3 --><?php $args = array( 'post_type' => 'product', 'posts_per_page' => 3, 'offset' => 4, 'meta_query' => array( array('key' => '_visibility','value' => array('catalog', 'visible'),'compare' => 'IN'),array('key' => '_featured','value' => 'yes')) ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); $_product; if ( function_exists( 'get_product' ) ) { $_product = get_product( $loop->post->ID ); } else { $_product = new WC_Product( $loop->post->ID ); } ?><li class="featured"> <?php //woocommerce_show_product_sale_flash( $post, $_product ); ?> <a href="<?php echo get_permalink( $loop->post->ID ) ?>" title="<?php echo esc_attr($loop->post->post_title ? $loop->post->post_title : $loop->post->ID); ?>"> <?php if (has_post_thumbnail( $loop->post->ID )) echo get_the_post_thumbnail($loop->post->ID, 'shop_catalog'); else echo '<img src="'.woocommerce_placeholder_img_src().'" alt="Placeholder" />'; ?> <h3><?php the_title(); ?> <span class="price"><?php echo $_product->get_price_html(); ?></span></h3> </a> </li><?php endwhile; ?> </ul> <?php } ?> 

Я узнал, как захватить последний SQL-запрос запуска, и он возвращается как:

 SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) INNER JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) WHERE 1=1 AND ( ( wp_postmeta.meta_key = '_visibility' AND wp_postmeta.meta_value IN ('catalog','visible') ) AND ( mt1.meta_key = '_featured' AND mt1.meta_value = 'yes' ) ) AND wp_posts.post_type = 'product' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 3 

Конечно, если я запустил это в phpMyAdmin, я получу набор результатов ermpty. Почему это должно было случиться? Мы перешли на WooCommerce 3.0.5 пару недель назад, поэтому мне интересно, возможно ли что-то внутренне изменилось, что требует обновления?

Обновление: копаясь в этом немного больше, я обнаружил, что это не похоже на набор:

 ( mt1.meta_key = '_featured' AND mt1.meta_value = 'yes' ) ) 

Они отображаются как «признанные» в области администрирования WooCommerce, хотя:

введите описание изображения здесь

Как WooCommerce решает, есть ли сообщение? Мое понимание из приведенного выше кода заключается в том, что он делает:

 wp_postmeta.meta_key = "_featured" AND wp_postmeta.meta_value = "yes" 

… но это не может быть прав, так как буквально никакие значения в таблице wp_postmeta даже не соответствуют wp_postmeta !

ОБНОВЛЕНИЕ 3 : Как было предложено, я включил отладку в WP, и теперь я получаю это на главной странице:

 Notice: Undefined index: woo_enable_lightbox in /home/costumes/web/thecostumerooms.co.uk/public_html/test/wp-content/themes/artificer/includes/theme-woocommerce.php on line 274 Notice: Undefined index: woo_shop_archives_fullwidth in /home/costumes/web/thecostumerooms.co.uk/public_html/test/wp-content/themes/artificer/includes/theme-woocommerce.php on line 91 class="home blog logged-in admin-bar no-customize-support gecko alt-style-default two-col-left "> Notice: Undefined index: woo_display_store_info in /home/costumes/web/thecostumerooms.co.uk/public_html/test/wp-content/themes/artificer/index.php on line 141 Notice: Undefined index: woo_display_store_info in /home/costumes/web/thecostumerooms.co.uk/public_html/test/wp-content/themes/artificer/index.php on line 144 Notice: Undefined index: woo_display_store_info in /home/costumes/web/thecostumerooms.co.uk/public_html/test/wp-content/themes/artificer/index.php on line 167 

То есть на ванильной установке последнего WP, наряду с Artificer и WooCommerce (3.0.5)

Solutions Collecting From Web of "Отладка, почему избранные изображения перестали отображаться в WooCommerce на главной странице"

Это только инструкции WooCommerce 3.x.

Этот поток на GitHub ( https://github.com/woocommerce/woocommerce/issues/14914#issuecomment-299714488 ) был обновлен одним из разработчиков Woo, и он представил пример цикла и объяснил, что происходит:

Показанный был meta в 2.6, но является таксономией (для производительности!) В 3.0 – поэтому настройте запросы на использование tax_query вместо meta_query соответственно.

Чтобы применить новые аргументы к вашей теме Artificer с помощью WooThemes (слишком плохо они не обновили тему тоже), выполните следующие действия:

Для не-разработчиков:

Используйте FTP для входа на ваш хост. Есть много клиентских приложений ftp, введите «ftp clients» в Google без кавычек. Затем выберите один для вашей ОС. Войдите с вашими учетными данными, которые вы получили, когда приобрели свой хостинг. Как правило, это то же самое, что и имя пользователя и пароль для входа в cPanel. Вы бы ftp.yourdomain.com . Вы public_html в свой каталог public_html . Затем найдите свой каталог wp_content , в этом каталоге вы увидите больше подкаталогов, одна из которых – это themes внутри, в которых вы увидите имя администратора каталога. Файл, который является главной страницей, – index.php . Это файл, который вы заменяете тем, что находится в этом контексте.

https://gist.github.com/carasmo/03cbbd2f70c30d0649de4ada7095a3dd

Нажмите кнопку «raw», затем сохраните (в каталог, созданный для этого на вашем компьютере), как index.php. Не открывайте его, если у вас нет редактора кода. Затем перетащите его со своего компьютера в каталог ../wp-content/themes/artificer.

Для разработчиков:

Замените два местоположения, где петля $ args:

цикл 1 для трех изображений:

  $args = array( 'post_type' => 'product', 'posts_per_page' => 3, 'tax_query' => array( array( 'taxonomy' => 'product_visibility', 'field' => 'name', 'terms' => 'featured', ), ), ); 

петля 2 для одного изображения

  $args = array( 'post_type' => 'product', 'posts_per_page' => 1, 'offset' => 3, 'tax_query' => array( array( 'taxonomy' => 'product_visibility', 'field' => 'name', 'terms' => 'featured', ), ), );