2010-08-31 3 views
0

Я пытаюсь получить метаданные эскизов для сообщений в блоге Wordpress вместе со своей категорией и некоторыми другими данными. Данные эскизов сериализованы, и я позже их неэтериализую.Запрос миниатюр Wordpress

Вот запрос у меня есть:

SELECT wpostmeta.meta_value AS url, 
    wposts.post_content, wposts.post_title, wposts.post_status, wposts.post_name, 
    cat_terms.name AS category_name, cat_terms.term_id AS category_id, 
    ttable.meta_value AS thumb_data 
    FROM `wp_postmeta` AS wpostmeta, 
    `wp_posts` AS wposts 
    INNER JOIN wp_term_relationships AS cat_term_relationships ON (wposts.ID = cat_term_relationships.object_id) 
    INNER JOIN wp_term_taxonomy AS cat_term_taxonomy ON (cat_term_relationships.term_taxonomy_id = cat_term_taxonomy.term_taxonomy_id AND cat_term_taxonomy.taxonomy = 'category') 
    INNER JOIN wp_terms AS cat_terms ON (cat_term_taxonomy.term_id = cat_terms.term_id) 
    LEFT JOIN `wp_postmeta` AS ttable ON (wposts.ID = ttable.post_id AND ttable.meta_key = '_wp_attachment_metadata') 
    WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = 'url' 
    AND wposts.post_type = 'post' 

Все работает для крепления части, за исключением. «thumb_data» имеет значение NULL.

Не могли бы вы помочь мне исправить это?

ответ

1

Этот запрос решить мою проблему:

$sql = "SELECT wposts.ID AS ID, thumbposts.ID AS thumbposts_ID, 
     postmeta.meta_value AS url, 
     wposts.post_content, wposts.post_title, wposts.post_status, wposts.post_name, 
     cat_terms.name AS category_name, cat_terms.term_id AS category_id, 
     thumb.meta_value AS thumb_data 

     FROM `wp_postmeta` AS postmeta, 
     `wp_posts` AS thumbposts, 
     `wp_postmeta` AS thumb, 
     `wp_posts` AS wposts 

     INNER JOIN wp_term_relationships AS cat_term_relationships ON (wposts.ID = cat_term_relationships.object_id) 
     INNER JOIN wp_term_taxonomy AS cat_term_taxonomy ON (cat_term_relationships.term_taxonomy_id = cat_term_taxonomy.term_taxonomy_id AND cat_term_taxonomy.taxonomy = 'category') 
     INNER JOIN wp_terms AS cat_terms ON (cat_term_taxonomy.term_id = cat_terms.term_id) 

     WHERE wposts.ID = postmeta.post_id 
     AND postmeta.meta_key = 'url' 

     AND thumbposts.post_parent = wposts.ID 
     AND thumbposts.post_type = 'attachment' 

     AND thumb.post_id = thumbposts.ID 
     AND thumb.meta_key = '_wp_attachment_metadata' 

     AND wposts.post_type = 'post'"; 

    if($filter == 1){ 
     $sql .= " AND cat_terms.term_id = '1'"; 
    } 
    if($filter == 2){ 
     $sql .= " AND cat_terms.term_id = '3'"; 
    } 

    $sql .= " GROUP BY wposts.ID 
     ORDER BY wposts.post_date ASC"; 
0

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

Например, вы можете использовать get_posts с 'post_type' => 'attachment' и 'post_mime_type' => 'image' для получения вложений изображений, а затем вывода метаданных, и есть много функций, встроенных для изменения размера, отображения и кадрирования миниатюры, такие как get_post_thumbnail() и т.д.

Смежные вопросы