All Inclusive. Все включено!

Плагин двумя дополнительными SQL запросами присоединяет в исходную выборку данных $wp_query->posts все мета поля, все файлы и картинки, для каждой картинки формируются прямые url на маленькое, среднее и полное изображение. Теперь нет необходимости использовать функции the_post_thumbnail и get_post_meta.
Принцип работы:
Итак допустим мы заходим на главную страницу нашего блога WordPress выдает нам список последних 10 записей. Напомню данные уже находятся в глобальном объекте $wp_query в массиве posts $wp_query->posts. Для начала создается список из ID (номера записей под которыми они хранятся в БД).
Формируем первый SQL запрос:

Человеческий перевод – найти все дочерние записи для записей с номерами (’21′,’29′,’30′,’35′,’38′,’42′,’46′,’48′,’49′,’55′) И тип искомых записей должен быть “attachment”. То есть короче говоря мы находим все файлы (attachment) который мы загрузили для наших 10 записей.

Вновь формируем список ID: первые 10 ID записей и к нему добавляем ID файлов (атачметнов). Атачменты как и обычные записи хранятся в одной таблице wp_posts.
Теперь воспользуемся функцией update_meta_cache:

$ar_all_id – здесь исходные записи + атачменты
таким образом все сразу попадает в кеш и последующие вызовы get_post_meta будут извлекать значение из кеша. Ну а далее уже дело техники – данные надо аккуратно разложить по полочкам ничего не перепутав. Все мета поля поля добавляются в массив $post->meta, а файлы в массив $post->files причем файлы сразу же сортируются по номеру order (при загрузке это можно указать – порядок сортировки).
Кроме того для каждого файла, если это изображение, рассчитываются полные пути на превьюшки : маленькая(thumbnail), средняя( medium) и полная картинка (full).
Чтобы увидеть картину в целом – очень рекомендую где нибудь в теле главного цикла добавть распечатку:

‘; ?>
[/crayon]

Теперь, чтобы получить значение мета поля уже не нужно вызывать функцию get_post_meta($post->ID, ‘metaName’,true);
Все поля будут находится в ассоциативном массиве $post->meta то есть для metaName надо использовать $post->meta['metaName'].
Все файлы прикрепленные к записи находятся в массиве $post->files.
Например, чтобы проверить загружено ли хоть одно изображение для текущей записи и если загружено то вывести его маленькое картинку, ну а если нет то выводим заглушку.

Вот так всего лишь двумя дополнительными SQL убиваем сразу целый табун зайцев :)

Функцию
function all_inclusive($posts, $forcibly = 0) можно использовать не как плагин, а просто добавлять в свою тему и затем использовать принудительный вызов:

all-inclusive.zip

Комментарии 22 к “All Inclusive. Все включено!”

  1. Александр Косаковский:

    Только включаю “Включить акселератор All Inclusive” сразу выдает ошибку:

    Fatal error: Call to undefined function update_meta_cache() in Z:\home\localhost\www\karta\wp-content\plugins\ads-wordpress\all_inclusive.php on line 53

    подскажите в чем проблема?

  2. Евгений:

    Fatal error: Cannot use string offset as an array in Z:\home\localhost\www\dat\wp-content\plugins\ads-wordpress\all_inclusive.php on line 74.
    В чем может быть проблема?

    • Евгений:

      Если all_inclusive.php отключаю в плагине, то не выводятся ни картинки, не мета поля. Помогите, пожалуйста

      • Евгений:

        Удалил все посты – сайт заработал. Мне кажется, что стоит все таки выяснить причину. Заранее благодарен.
        P.S. – идея плагина отличная! Спасибо за труд!

    • admin:

      не могу сказать, пишет – не могу использовать строку как массив. строка это 74:
      $thumbUrl = $dirname.’/’.$meta_value['sizes']['thumbnail']['file'];
      может какой-то плагин хитрый для загрузок стоит или галерея какая-то хитрая, настройки папки uploads не меняли?

  3. Добрый день, Юрий!

    Работаем с плагином, настроили форму добавления и форму отображения. Здесь все нормально, вопросов пока нет. Только вот на главной странице блога высветились такие ошибки, причем в трех местах:

    Warning: Invalid argument supplied for foreach() in /home/greatred/public_html/wp-content/plugins/ads-wordpress/all_inclusive.php on line 47

    Warning: usort() [function.usort]: The argument should be an array in /home/greatred/public_html/wp-content/plugins/ads-wordpress/all_inclusive.php on line 108

    Warning: Invalid argument supplied for foreach() in /home/greatred/public_html/wp-content/plugins/ads-wordpress/all_inclusive.php on line 109

    Можете подсказать, с чем это может быть связано и как это решить? Заранее благодарю за оперативный ответ!

    • admin:

      версия WP должна быть больше 3, либо отключать all_inclusive и шаблоны постов
      добавление записей должно работать нормально

  4. Так у нас версия WordPress 3.3.1
    Не понял насчет отключения шаблонов постов. Это в смысле, что то, что мы настраивали в post_default_template.php работать не будет? А как тогда будут отображаться данные через вводимые формы?

  5. Здравствуйте,у меня не выводятся мета поля,почему?

  6. Вадим_К:

    на WP 3.5 формы по вводу объявлений работают адекватно, все мета данные сохраняются (версия плагина – 4.0), но вот вывод согласно вашему руководству не работает. отображается только строчка “читать далее”, которая не несет в себе никакой ссылки и никуда не ведет, собственно.

    подскажите, пожалуйста, в чем может быть беда? пробовал отключать все плагины, оставляя только ads_wordpress и ads-widgets, но проблему не решало. всё остальное в плагине работает адекватно и правильно, кроме собсвенного выводы данных по шаблону

    • admin:

      проблема очень проста текст вашего объявления слишком короткий, собственно говоря обрезать там нечего поэтому ссылки нет
      да есть момент такой некорректно короткий текст обрабатывается, а вернее сказать тут накладка происходит WP свою ссылку вставляет а плагин удаляет
      советую вам в шаблоне post_defualt_template.php отключить функцию ads_more 41 строка
      добавить просто вывод echo $post_content

  7. На WP3.5.1 плагин “All Inclusive” запустить не удалось… Откатился на WP3.4.2 – работает!

  8. Плагин установил, объявления добавляются, но при подробном просмотре объявления (по нажатию на ссылку читать далее или по заголовку) выкидывает на страницу 404… В чем может быть проблема?

  9. Алелксей:

    Юрий, а вы можете написать пример вывода заголовка и приложенного файла записи полностью (в цикле)? (запись создана при помощи плагина ads_wp)
    При условии, что нужно вывести записи из “3″ категории на главной странице сайта.

    Спасибо.

    • admin:

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

      ‘;
      }
      [/crayon]
      query_posts – как пользоваться функцией смотри на оф сайте

  10. Алексей:

    Юрий, если позволите еще один вопрос.
    На странице нет возможности использовать цикл query_posts (из-за кое-каких особенностей), зато отрабатывает цикл

    Подскажите как использовать (подключить) all_inclusive к этому циклу. Чтобы внутри этого цикла использовать метаполя ads_wp.
    Спасибо.

  11. Юрий. Расскажи, пожалуйста поподробнее про принудительный вызов функции. Куда ее пихать и где вызывать. Штука полезная, но никак не могу реализовать у себя на портале.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url=""> [php]…[/php] [html]…[/html] [css]…[/css] [text]…[/text] [code]…[/code]