【问题标题】:Retrieve wordpress posts with featured image via SQL通过 SQL 检索带有特色图片的 wordpress 帖子
【发布时间】:2013-10-04 17:59:31
【问题描述】:

我在 Wordpress 之外的 PHP 脚本中使用此查询来检索带有特色图片的条目

SELECT  ( SELECT guid FROM wp_posts WHERE id = m.meta_value ) AS url 
FROM wp_posts p, wp_postmeta m
WHERE p.post_type =  'post'
AND p.post_status =  'publish'
AND p.id = m.post_id
AND m.meta_key =  '_thumbnail_id'

...而且效果很好。

但是这样我得到了全尺寸的图片 URL。我需要检索这些图像的“中等”或“缩略图”尺寸。

¿有什么方法可以做到这一点?

【问题讨论】:

    标签: php mysql sql wordpress


    【解决方案1】:
    SELECT    
        p.ID,
        p.post_title AS title, 
        p.post_name AS post_name,
       (SELECT meta_value from wp_postmeta where post_id = m.meta_value and meta_key='_wp_attachment_metadata') AS meta_value
    FROM 
        wp_posts p, 
        wp_postmeta m
    WHERE
            p.post_type = 'post'
        AND p.post_status = 'publish'
        AND p.id = m.post_id
        AND m.meta_key = '_thumbnail_id'
    ORDER BY 
        p.post_date DESC
    LIMIT 5;
    

    然后使用带有 meta_value 的反序列化 PHP 函数

    【讨论】:

      【解决方案2】:

      以下查询,改编自上述内容,解决了我的特殊问题,即获取最后四个帖子及其特色图片。加上我可以从中构建漂亮 URL 的 post_name

      SELECT title, post_name, date, content, CONCAT(LEFT(image, LENGTH(image) - LOCATE('.', REVERSE(image))),'-150x150.',SUBSTRING_INDEX(image, '.', -1)) AS image
      FROM (
        SELECT    
        p.post_title AS title, 
        p.post_status AS 'status', 
        p.post_date AS date,
        p.post_content AS content,
        p.post_name AS post_name,
        (SELECT `guid` FROM wp_posts WHERE id = m.meta_value) AS image
        FROM wp_posts p, wp_postmeta m
        WHERE p.post_type = 'post'
        AND p.post_status = 'publish'
        AND p.id = m.post_id
        AND m.meta_key = '_thumbnail_id'
        ORDER BY date DESC
        LIMIT 4
      ) TT
      

      当然,从那里很容易制作摘录等:

      for($i=0; $i< $num_rows; $i++){  
        $post_content = mysql_result($query_result, $i, "content"); 
        $post_excerpt = substr($post_content, 0, 90); 
        $post_permalink = $post_url . mysql_result($query_result, $i, "post_name");
      
        echo $post_permalink; //etc
      
      }
      

      【讨论】:

        【解决方案3】:

        这是回复:

        SELECT TITRE,DESCR,URL, CONCAT(LEFT(IMG, LENGTH(IMG) - LOCATE('.', 
        REVERSE(IMG))),'-150x150.',SUBSTRING_INDEX(IMG, '.', -1)) AS IMG FROM (
        SELECT    
        p.`post_title` AS TITRE, 
        (SELECT `meta_value` FROM wp_postmeta WHERE `post_id` = p.`ID` and `meta_key`='_yoast_wpseo_metadesc') AS DESCR,
        p.`guid` AS URL,
        (SELECT `guid` FROM wp_posts WHERE id = m.meta_value) AS IMG
        FROM wp_posts p, wp_postmeta m
        WHERE p.post_type =  'post'
        AND p.post_status =  'publish'
        AND p.id = m.post_id
        AND m.meta_key =  '_thumbnail_id') TT
        
        where DESCR is not null
        

        【讨论】:

          【解决方案4】:

          您可以尝试此查询缩略图大小,对于中等图像,如果您知道尺寸,我不确定正确的大小,然后按照我在下面使用SUBSTRING_INDEX 制作的自定义别名来获取文件的扩展名,然后我有将CONCAT 函数与post_name 列和尺寸+ 扩展一起使用,同样您可以对中等大小执行此操作,因为所有上传都转到上传文件夹,您可以分析生成的拇指名称为original attachment name + -150x150 or other dimensions,所以从这个逻辑你thumbs 获得带有尺寸的名称,post 的附件存储在 post_meta 中,带有 post id 并具有键名 _wp_attachment_metadata 存储有关不同大小文件的所有信息,但在 mysql 中以序列化形式查询你不能反序列化数据

          SELECT    
          CONCAT(p.`post_name` ,'-150x150.',
          SUBSTRING_INDEX(( SELECT `guid` FROM wp_posts WHERE id = m.meta_value ), '.', -1) )    
           AS `thumbnail`,
           (SELECT guid FROM wp_posts WHERE id = m.meta_value ) AS `full`
          FROM wp_posts p, wp_postmeta m
          WHERE p.post_type =  'post'
          AND p.post_status =  'publish'
          AND p.id = m.post_id
          AND m.meta_key =  '_thumbnail_id'
          

          此查询适用于我获取大小为 150*150 的缩略图,希望它也适用于您

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-09-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-13
            • 1970-01-01
            • 1970-01-01
            • 2015-04-05
            相关资源
            最近更新 更多