2013-08-09 3 views
2

У меня есть старая функция, которая использует выдержку сообщения для хранения миниатюры изображений. Это было немного хаки и долгое время работало.Wordpress Получить изображения, используя MySQL

Теперь мне нужно использовать выдержку для публикации, вы знаете, выдержку. Поэтому я хочу обновить эту функцию, чтобы захватить информацию об изображении src прямо из почтовых вложений.

Вопрос:

Как я могу обновить код $before_sql SQL ниже, чтобы захватить первый прикрепленное изображение в приложении пост?

Код:

(? Я думаю, что я озабочен только о SqL части, как остальные должны очиститься) Там больше секция кода тоже, но вместо того, чтобы вставить все это здесь, этот фрагмент должен быть достаточно.

$before_sql = "SELECT ID, post_title, post_excerpt FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' and post_date < '$cur_post_date' ORDER BY post_date DESC LIMIT $thumbnum"; 
$before_results = $wpdb->get_results($before_sql); 
if($before_results) { 
    foreach ($before_results as $before_result) { 
     $post_title = stripslashes($before_result->post_title); 
     $permalink = get_permalink($before_result->ID); 
     $post_excerpt = ($before_result->post_excerpt); 
     $output="<div class=\"thumbnails\"><a href=\"" . $permalink . "\" title=\"Permanent Link: " . $post_title . "\">" . $post_excerpt . "</a><br />&lsaquo;</div>\n   " . $output; 
    } 
} 

ответ

3

Чтобы получить первое вложение с должности в одном запросе можно сделать таким образом

SELECT *, 
(SELECT guid FROM `wp_posts` WHERE post_type ='attachment' AND post_parent=wp.`ID` ORDER BY post_date ASC LIMIT 1) AS attachment 
FROM `wp_posts` wp 

ORDER BY POST_DATE ASC получит первое изображение, если вы хотите, чтобы последние загруженное изображение, которое вы может просто использовать DESC ORDER BY DESC POST_DATE

Вот ваш запрос

$before_sql = "SELECT ID, post_title, post_excerpt, 
(SELECT guid FROM $wpdb->posts WHERE post_type ='attachment' AND post_parent=wp.`ID` 
ORDER BY post_date ASC LIMIT 1) AS attachment 
FROM $wpdb->posts wp WHERE wp.post_status = 'publish' AND wp.post_type = 'post' 
and wp.post_date < '$cur_post_date' ORDER BY wp.post_date DESC LIMIT $thumbnum"; 

Он отлично работает для меня

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

$before_sql = "SELECT ID, post_title, post_excerpt, 
(SELECT guid FROM $wpdb->posts WHERE post_type ='attachment' AND post_parent=wp.`ID` 
ORDER BY post_date ASC LIMIT 1) AS attachment 
FROM $wpdb->posts wp WHERE wp.post_status = 'publish' AND wp.post_type = 'post' 
and wp.post_date < '$cur_post_date' HAVING attachment IS NOT NULL ORDER BY wp.post_date DESC LIMIT $thumbnum"; 
+0

не видел, чтобы Может заставить его работать, и 'var_dump ($ before_sql) 'показывает' NULL'. Я думаю, что проблема может быть «post_parent = wp.'ID». Как я могу уточнить это как идентификатор сообщения? У меня есть 'global $ id'. 'post_parent = wp. '$ id''fails тоже. – Pat

+0

Почему вы var_dump (sql) ?? вам нужно сделать '$ before_results = $ wpdb-> get_results ($ before_sql);' и 'post_parent = wp.'ID'' является корреляционным псевдонимом для передачи в подзапросе. Запустите мой первый запрос в phpmyadmin, вы можете увидеть его работу –

+0

Да , теперь я вижу, что он работает. За исключением использования идентификатора или '' ID ', я дал NULL на вложении в foreach. – Pat

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