Intereting Posts
get_post_meta unserialize issue – retuns boolean (false) Как обнаружить мобильные устройства и представить им конкретную тему? Как изменить текст «Читать дальше»? Ничего не найдено из запроса $ wpdb-> get_results () при попытке присоединиться к более чем одному запросу мета-ключа Как проверить, зарегистрирован ли пользователь (не текущий пользователь)? Разрешить пользователям выбирать разбивку на страницы или следующую / предыдущую (комбинацию) проверьте, удалено ли на сайте WordPress обновления Настройщик тембров – скрыть / вычеркнуть настройки на основе других настроек jQuery UI & Admin (Календарь) Как изменить постоянную ссылку на переведенную домашнюю страницу? Получение сбоя при использовании filemtime () с wp_enqueue_style Изменение даты и времени публикации с помощью функции Как я могу вставить аргументы WP_Query в функцию? Создайте структуру URL-адресов для моих блогов на основе категорий и подкатов Проверьте, есть ли у страницы / сообщения какие-либо якоря, которые ссылаются на изображение jpg / gif / png

Ошибка поиска URL-адреса эскизов на главной странице

Я выполняю несколько запросов в файле front-page.php . Кажется, что все они работают нормально, за исключением того, что мне нелегко получить миниатюру.

Этот код на моей первой странице выглядит следующим образом:

 <?php $thumb_args = array( 'posts_per_page' => 1, 'cat' => 87 ); $thumb_query = new WP_Query( $thumb_args ); while ($thumb_query->have_posts()) : $thumb_query->the_post(); ?> <div id="post-<?php the_ID(); ?>" <?php post_class('cat-excerpt right') ?> itemprop="blogPost"> <h2 class="headline" itemprop="title">Posted Without Comment</h2> <?php include (TEMPLATEPATH . '/inc/meta.php' ); ?> <a href="<?php the_permalink(); ?>" itemprop="url"> <img src="<?php get_the_post_thumbnail('custom-medium'); ?>" itemprop="image"> </a> </div><!-- End .post .cat-excerpt --> <?php endwhile; wp_reset_postdata(); ?> 

Я попытался использовать как the_post_thumbnail() самостоятельно, так и get_the_post_thumbnail() в <img> . Когда я использую the_post_thumbnail() (с передачей аргумента или без него), он просто возвращает пустой тег привязки, который ссылается на правильный пост. Когда я использую get_the_post_thumbnail() в <img> (с или без передачи аргумента, как показано выше), я не возвращаю url для изображения. Ссылка на фактический пост всегда правильная.

Это код в файле functions.php :

 if (function_exists( 'add_theme_support' ) ) { add_theme_support( 'automatic-feed-links' ); add_theme_support( 'post-formats', array('audio','gallery', 'image', 'video')); add_theme_support( 'post-thumbnails' ); if (function_exists( 'set_post_thumbnail_size' ) ) { set_post_thumbnail_size( 620, 349, false ); } } if (function_exists( 'add_image_size' ) ) { add_image_size( 'profile', 100, 100, false ); add_image_size( 'custom-small', 300, 169, false ); add_image_size( 'custom-medium', 400, 225, false ); add_image_size( 'custom-full', 520, 293, false ); } 

single.php отлично работает в моем файле single.php , который использует размер эскиза по умолчанию, который я определил выше. Итак, если что-нибудь, я думаю, проблема front-page.php с размерами изображений, которые я добавил, и / или с моим файлом front-page.php .

Не уверен, как вы это делаете в своем single.php , но я уверен, что не так. Основная проблема заключается в том, что как the_post_thumbnail() и get_the_post_thumbnail() генерируют вывод тега img для вас – поэтому включение его в атрибут src тега img как в вашем коде, не может работать.

Дополнительно: последнее return , первое из них выводит результат. Вы используете последнее, но не повторяйте его, чтобы на самом деле ничего не происходило. Существуют и другие отличия, например: the_post_thumbnail() может использоваться только для текущего сообщения, поскольку у него нет параметра $post_id ; get_the_post_thumbnail() может использоваться для любого миниатюры сообщений, если вы get_the_post_thumbnail() $post_id . Подробнее на страницах codex.

Таким образом, использование в вашем случае будет выглядеть так:

 // either: the_post_thumbnail( 'custom-medium' ); // or: echo get_the_post_thumbnail( get_the_ID(), 'custom-medium' ); 

Или если вы действительно хотите заполнить атрибут src тега img вы можете сделать:

 <?php $img_url = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), 'custom-medium' ); ?> <img src="<?php echo $img_url[0]; ?>"> 

Используя wp_get_attachment_image_src() , get_post_thumbnail_id() и get_the_ID() – последний уже использовался в приведенном выше примерном коде.


Обновить:

Чтобы уточнить, вышеупомянутые методы делают все работы – проверены и используются много раз. Я предполагаю, что должна быть другая проблема, но на самом деле она не может сказать из имеющейся информации.

В качестве доказательства концепции здесь front-page.php с пользовательским запросом :

 <?php get_header(); $paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1; $thumb_args = array( 'posts_per_page' => 1, 'cat' => 87, 'paged' => $paged ); $thumb_query = new WP_Query( $thumb_args ); $temp_query = $wp_query; $wp_query = NULL; $wp_query = $thumb_query; if ( $thumb_query->have_posts() ) { while ( $thumb_query->have_posts() ) { $thumb_query->the_post(); the_title(); echo '<br>'; the_post_thumbnail(); echo '<br>'; echo get_the_post_thumbnail(); echo '<br>'; $img_url = wp_get_attachment_image_src( get_post_thumbnail_id() ); echo '<img src="'. $img_url[0]. '">'; } } else { // no posts } echo '<br>'; previous_posts_link( '← ' ); next_posts_link( ' →', $thumb_query->max_num_pages ); wp_reset_postdata(); $wp_query = NULL; $wp_query = $temp_query; get_footer(); 

Мне также пришлось бросить это в functions.php чтобы сделать разбиение на страницы:

 add_action( 'pre_get_posts', 'wpse162764_frontpage_custom_query_additional_pagination_fix' ); function wpse162764_frontpage_custom_query_additional_pagination_fix( $query ) { if ( is_admin() ) { return; } if ( is_front_page() ) { $query->set( 'posts_per_page', 1 ); } } 

Если это не работает для вас, убедитесь, что вы установили правильный параметр, чем должна быть другая проблема.

Кроме того, пользовательские запросы едва нужны, поэтому вы можете использовать основной запрос .

front-page.php с основным запросом :

 <?php get_header(); if ( have_posts() ) { while ( have_posts() ) { the_post(); the_title(); echo '<br>'; the_post_thumbnail(); echo '<br>'; echo get_the_post_thumbnail(); echo '<br>'; $img_url = wp_get_attachment_image_src( get_post_thumbnail_id() ); echo '<img src="'. $img_url[0]. '">'; } } else { // no posts } echo '<br>'; previous_posts_link( '← ' ); next_posts_link( ' →' ); get_footer(); 

Кроме того, это необходимо в functions.php чтобы он работал с основным запросом:

 add_action( 'pre_get_posts', 'wpse162764_pre_get_posts_for_frontpage_main_query' ); function wpse162764_pre_get_posts_for_frontpage_main_query( $query ) { if ( is_admin() || ! $query->is_main_query() ) { return; } if ( is_front_page() ) { $query->set( 'posts_per_page', 1 ); $query->set( 'cat', 87 ); } } 

Заметка:

BTW просто для того, чтобы уточнить, что я запускал это с несколькими запросами / петлями тоже, работает и, если все сделано правильно, не может быть проблемой.

Ваш код, кажется, считает само собой разумеющимся, что миниатюра действительно существует для любой публикации, полученной вашим запросом. Я лично рекомендую проверить наличие признака, прежде чем пытаться его восстановить.

 <a href="<?php the_permalink(); ?>" itemprop="url"> <img src="<?php get_the_post_thumbnail('custom-medium'); ?>" itemprop="image"> </a> 

Метод has_post_thumbnail () , если он выполняется в цикле, скажет вам, есть ли у текущего сообщения миниатюра. Я бы скорректировал ваш код с учетом этого и предвидел что-то вроде:

 <a href="<?php the_permalink(); ?>" itemprop="url"> <?php if( has_post_thumbnail() ) : ?> <img src="<?php get_the_post_thumbnail('custom-medium'); ?>" itemprop="image"> <?php else: ?> <!-- No Image Available; maybe put something else in its place? --> <?php endif; ?> </a> 

Выполняя это, вы можете не только убедиться, что изображения будут отображаться только при необходимости, но также смогут идентифицировать тот факт, что для данного сообщения нет признака изображения (путем просмотра источника и поиска комментария HTML в моем приведенном примере).