После обновления WordPress до версии 3.4 на главной странице не отображаются миниатюры постов — описание проблемы и ее решение

После обновления WordPress до версии 3.4 на главной странице не отображаются миниатюры постов - описание проблемы и ее решение | n-wp.ru Настройки
Обновление WordPress до версии 3.4 выявило одну ошибку, которая скрывается в базе данных - после обновления перестали отображаться миниатюры постов. Описываю способ исправления этого бага с помощью специального скрипта.

В одном из блогов после обновления WordPress до версии 3.4 я столкнулся с одной проблемой — на главной странице перестали отображаться миниатюры постов. Этот баг был характерен не для всех постов, и я не наблюдал его в других блогах, так что для установки причины мне пришлось перелопатить много информации. Тем не менее проблема была полностью решена.

После обновления WordPress до версии 3.4 на главной странице не отображаются миниатюры постов - описание проблемы и ее решение

Миниатюры постов на главной странице выводятся стандартной функцией:

</pre>
<p>Изучив информацию об обновленных файлах движка, которую предоставляют разные источники, выяснил, что виноваты в том, что миниатюры не отображаются, метаданные об ID изображений, используемых в качестве миниатюр поста, которые записываются в базу данных:</p>
<pre>meta_key = '_thumbnail_id'

Что-то в новой версии WordPress не срастается с этими мета-данными, в итоге некоторые миниатюры не отображаются. Выход тут один — удалять эти метаданные в базе данных, и создавать их заново, в уже обновленной версии. Понятно, что работа эта не тривиальная, и требует достаточных знаний, опыта, и главное — прямых рук. Не имея ничего из перечисленного, да желания делать это все вручную, я стал искать автоматический вариант решения проблемы, который и был найден в посте Нейла Петерсона. Рассказываю, что нужно сделать, если вы столкнулись с такой же проблемой.

Сделайте бэкап базы данных.

Создайте файл imagefix.php, и впишите в него следующий код:

get_results($sql);
foreach ( $posts as $post ){
    $sql = 'SELECT meta_id FROM `wp_postmeta` WHERE post_id = '.$post->meta_value.' AND meta_key = "_wp_attached_file"';
    $check = $wpdb->get_results($sql);
    if(count($check)) continue; // We've already done this one...
    $sql = 'SELECT meta_key,meta_value FROM `wp_postmeta` WHERE post_id = '.$post->meta_value.' AND meta_key = "_wp_attachment_metadata"';
    $thumb = $wpdb->get_results($sql);
    $data = unserialize($thumb[0]->meta_value);
    if(!isset($data['sizes']['thumbnail']['file'])) continue;
    $date = dirname($data['file']);
    $filename = $data['sizes']['thumbnail']['file'];
    $sql = 'INSERT INTO `wp_postmeta` SET post_id='.$post->meta_value.', meta_key="_wp_attached_file", meta_value="'.$date.'/'.$filename.'"';
    $wpdb->query($sql);
}
echo 'done!';
?>

Перепишите этот файл в корневую папку вашего блога (там, где находится файл wp-load.php) и запустите его в браузере, введя адрес

http://вашсайт.ru/imagefix.php

Дождитесь окончания работы скрипта из этого файла, о чем будет свидетельствовать надпись done! После этого удалите файл imagefix.php с сайта.

Что делает скрипт в файле imagefix.php? Он исправляет метаданные о миниатюрах постов в базе данных, делая их совместимыми с новой версией WordPress 3.4.

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

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

  1. Sergey Biryukov

    Предполагаю, что на блоге был установлен плагин Auto Post Thumbnail.

    В его текущей версии (3.2.3) есть ошибка: у изображений, загруженных плагином, не хватает поля _wp_attached_file в таблице wp_postmeta.
    Раньше это не имело значения, но теперь функция get_attached_file() возвращает только реально существующие файлы: http://core.trac.wordpress.org/changeset/20613
    Предложенный в записи скрипт восстанавливает это поле для загруженных ранее файлов.

    Чтобы исправить сам плагин, нужно найти в нём строку 353:

    $thumb_id = wp_insert_attachment($attachment, $file, $post_id);
    

    и заменить $file (эта переменная не определена) на $new_file.

    Ответить
    1. tiaurus автор

      Этот плагин установлен не был. Но до обновления однократно использовался другой плагин — Simple Auto Featured Image. Скорее всего принцип работы у этих плагинов схожий. Кстати, добрые люди уже исправили баг в Auto Post Thumbnail.

      Ответить
      1. Sergey Biryukov

        У Simple Auto Featured Image принцип немного другой: он не скачивает изображения с других сайтов, а использует уже загруженные и прикреплённые к записи. К подобной проблеме он бы вряд ли привёл — видимо, причина в другом.

        Насколько я вижу, на knitly.com всё же установлен Auto Post Thumbnail. Это точно не тот блог? :)

        Ответить
        1. tiaurus автор

          Auto Post Thumbnail я установил после обновления — думал, он поможет решить проблему. Не помог даже после его обновления, а вот отдельный скрипт помог.

          Ответить
          1. Sergey Biryukov

            Понятно. Меня интересовала причина явления с точки зрения других потенциальных проблем — жаль, что узнать удалось лишь приблизительно.

            Ответить
  2. Sergey

    Пробовал ваш метод. Не работает. Проблема в теме. Где копать не знаю. Жаль, хорошая тема для фото.

    Ответить
    1. tiaurus автор

      А как вы определили, что проблема именно в теме? В другой теме миниатюры отображаются?

      Ответить
  3. yashma

    TIAURUS спасибо Вам за пост, я везде ищу решение этой проблемы, и только у Вас нашла хоть что-то!
    После выполненных действий — результата я не увидела…
    Но вот вопрос уже при загрузке страницы со скриптом у меня сразу же написано: working… done!
    я немного удивленна, он работает или нет? Простите, но я не сильна в php
    А Вы не знаете еще решений?
    Вообщем то у меня возникла проблема и я ее описала тут, может подскажите? :) а то я уже не знаю что и делать…
    вот ссылка:

    Ответить
  4. yashma

    прошу прощения вот ссылочка: http://ru.forums.wordpress.org/topic/%D0%9D%D0%B5-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D1%8F%D1%82%D1%81%D1%8F-%D0%BC%D0%B8%D0%BD%D0%B8%D0%B0%D1%82%D1%8E%D1%80%D1%8B-%D0%BD%D0%B0-%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%BE%D0%B9-%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-%D0%BF%D1%80%D0%B8-%D0%B7%D0%B0%D0%B3?replies=3

    Ответить