Запитуйте публікації лише із зображенням зображення


15

Я хочу запитувати 6 публікацій, але тільки тих, у яких додається пропоноване зображення. Я використовую meta_keyдля цього метод з WP_Queryтаким:

$args = array(
    'post_type'  => 'post',
    'meta_key' => '_thumbnail_id',
    'post_count' => 6 );
$query = new WP_Query($args);

Слідом за

<?php while($query->have_posts()) : $query->the_post(); ?>
    <h2><?php the_title(); ?></h2>
    <?php the_post_thumbnail('thumbnail'); ?>
<?php endwhile; ?>

Це, здається, не працює. Запит повертає більше 6 публікацій, а також тих, у яких немає зображеного зображення. Будь-які ідеї, що я тут помилився?

@chip: var_dump($query);дає великий результат, тому я розмістив його на пасті


2
Фрагмент коду працював для мене, як очікувалося. Можливо, помилка є в іншій частині коду.
Ralf912

Що ви отримуєте var_dump( $query )?
Чіп Беннетт

Як додаткову річ, про яку я подумав - повідомлення були імпортовані на мій локальний сервер з прямого веб-сайту за допомогою Wordpress експортера / імпортера. Всі оригінальні публікації містили зображення, які, очевидно, були втрачені в процесі імпорту. Чи може це означати, що хоч вилучені образи знімалися, мета-клавіші все ще залишаються причиною того, що запит зіпсується?
harryg

Коли ви запустили імпорт, чи встановили ви прапорець для завантаження та додавання всіх вкладених файлів / медіа? Якщо ви цього не зробили, ваші обрані зображення не працюватимуть. У публікаціях буде зображене зображення, але воно посилатиметься на вкладення, якого не існує, і так ніколи не буде відображатися
Tom J Nowell

Так, я поставив прапорець під час імпорту.
harryg

Відповіді:


3

Під час запуску імпортера потрібно встановити прапорець, щоб завантажити та імпортувати всі медіа / вкладені файли.

Якщо цього не зробити, публікації все ще матимуть набір зображених зображень, але додаток, на яке вони посилаються, буде недійсним, і будь-яка спроба зателефонувати the_post_thumbnailбуде невдалою. Використовуючи свій код, ви отримаєте лише назву посади, а не ескіз. Це створило б враження, що витягуються повідомлення, у яких немає зображеного зображення. Це не так, у них зображене зображення, воно просто недоступне через помилку, яку ви зробили під час імпорту.

Видаліть свої публікації та повторно імпортуйте за допомогою правильних налаштувань.

Також, щоб продемонструвати точку, ви не намагалися фактично перевірити пости, завжди перевіряйте, наприклад:

if ( $query->have_posts() ) { // you never checked to see if no posts were found
    while($query->have_posts()) { // alt style syntax doesn't work with most IDEs
        $query->the_post(); // individual statement should be on individual line
        ?><h2><?php the_title(); ?></h2><?php // you only need open/close tags here, not every line, save yourself some time typing
        if ( has_post_thumbnail() ) { // only print out the thumbnail if it actually has one
            echo '<p>post says it has a featured image</p>'; // double checking
            the_post_thumbnail('thumbnail');
        } else {
            echo '<p>this post does not have a featured image</p>';
        }
    }
} else {
    echo '<p>no posts found</p>';
}

Якщо ви не встановили прапорець, ви побачите зображення, які містять зображене зображення, але зображення не відображається


1
Я підозрюю, що це причина відповіді, яку я надавав, працює не так, як очікувалося. WordPress Самогубство плагін дуже корисний для видалення всього вмісту.
helgatheviking

Я точно встановив цей прапорець. Однак, з мого досвіду, це ніколи не працювало для мене. Усі зображення були пов’язані назад із зовнішнім сайтом. Я використовував плагін Імпорт зовнішніх зображень ( wordpress.org/extend/plugins/import-external-images ) для зберігання зображень на локальному рівні та вкладення.
harryg

У мене була така ж думка, я точно встановив прапорець, чому це все ще не працює? У мене це було від клієнтів, і це так просто помилитися, тому видаліть свої повідомлення, повторно імпортуйте і переконайтеся, що він перевірений, і якщо він все ще не працює, то ви можете його виключити. Інакше йдеться про Ніла ДеГрассе Тайсона про те, наскільки пафосно слабка людська пам’ять. Зараз я можу попросити зняти другий прапорець, і ви, мабуть, пам’ятаєте, що це теж бачили (але такого немає)
Tom J Nowell

і в той же час, обгортання the_post_thumbnailз has_thumbnailвикликом і додати ще випадок , так що ви напевне однозначно знаєте , що пост не має ознаки способу
Том J Ноуелл

Також переконайтесь, що ваш сервер здатний дістатися до віддаленого сервера. Якщо ваш сервер не може захопити віддалені запити, він не зможе імпортувати. Можливо, вам доведеться видалити вже захоплені медіафайли
Tom J Nowell

24

На WordPress 3.5, в мета - параметри запиту підтримки EXISTSі , NOT EXISTSяк порівняти операторів. У випадку, коли ви їх використовуєте, ви можете опустити valueчастину мета-запиту. Спробуйте наступні аргументи для вашого запиту:

$args = array(
   'post_type'  => 'post',
   'posts_per_page' => 6,
    'meta_query' => array(
        array(
         'key' => '_thumbnail_id',
         'compare' => 'EXISTS'
        ),
    )
);

Дякую за пропозицію. Зараз я отримую 6 повідомлень, але все ще отримую повідомлення без ескізів.
harryg

Я тестував це, і це працювало на мене. Але я помітив, що він поверне об'єкти, які мають мета-набір, але чомусь ідентифікатор вкладення невірний. Тому двічі переконайтеся, що у ваших публікаціях встановлено пропоновані зображення. Інакше я не знаю, у чому ще може бути проблема.
helgatheviking

Харріг, ти можеш підтвердити, що ти використовуєш версію v3.5 чи пізнішу?
Tom J Nowell

Так, я запускаю останню версію WordPress - щойно встановлену на моєму локальному сервері розробників у вигляді мережевої (багатосайтової) установки.
harryg

2
Лише додаткова інформація: Існує невирішена помилка, див. Trac ticket 23268 , що робить необхідним використання значення, якщо NOT EXISTSвоно використовується.
Миколай
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.