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

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

$query = "SELECT $wpdb->posts.* FROM $wpdb->posts WHERE  $wpdb->posts.post_parent IN('21','29','30','35','38','42','46','48','49','55') AND $wpdb->posts.post_parent
   AND $wpdb->posts.post_type = 'attachment'";

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

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

$all_meta = update_meta_cache('post', $ar_all_id);

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

<? echo '<pre>';print_r($post);echo '< /pre>'; ?>

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

<? if($post->files[0]):?>
    <img src="<?=$post->files[0]->thumbnail?>" />
<?else:?>
    <img src="http://ili.com.ua/zaglushka.jpg" />
<?endif?>

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

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

query_posts('cat=2,6,17,38');
$wp_query->posts =  all_inclusive($wp_query->posts, 1);

all-inclusive.zip
Обсуждение на сайте: wp.od.ua

Рубрика:  августа 20, 2010.
/ » » »


Похожие записи:

Новости

  • Экс-премьера обеспечат лечением
  • Помогаем братьям нашим меньшим
  • Китай инвестирует деньги в Украину
  • С морозами увеличился расход газа
  • Украинские школьники сидят дома
  • Россия может закрыть границу
  • Правила энергетической сферы
  • Комментарии


    Расширеный поиск +

    Другие статьи

    Объявления

    Мои проекты на WordPress

    Одесса Процессор Недвижимости, - специализированная доска объявлений по недвижимости на стоимость сборки $300 с установкой.
    Ильичевск - доска объявлений городская доска объявлений, основные разделы: недвижимость, транспорт, услуги, работа, куплю-продам. Стоимость сборки $300 с установкой.
    HiTech.Expert- все о высоких технологиях - разработка, поддержка.

    Счетчики