【问题标题】:Manually retrieve Wordpress posts with category/tags for JSON手动检索带有 JSON 类别/标签的 Wordpress 帖子
【发布时间】:2012-04-12 05:27:27
【问题描述】:

我正在尝试手动查询 wordpress 数据库以检索 json 提要的特定帖子内容。从理论上讲,我想返回多个“发布”对象,每个对象都包含每个标签/类别的“标签/类别”数组。

我目前正在使用以下 SQL 查询来检索我想要的帖子,但是我认为我缺少 wp_term_taxonomy 表之间的关系,并且这会返回每个标签/类别的唯一行:

SELECT wp_posts.post_date, wp_posts.post_content, wp_posts.post_title, wp_posts.ID, wp_terms.name
FROM wp_posts
LEFT JOIN wp_term_relationships ON ( wp_term_relationships.object_id = wp_posts.ID ) 
LEFT JOIN wp_terms ON ( wp_terms.term_id = wp_term_relationships.term_taxonomy_id ) 
WHERE 1=1
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish')
ORDER BY wp_posts.ID DESC 
LIMIT 25

有人对我如何实现目标有任何建议吗?我不想做的是做一个查询来获取帖子,然后遍历每一个并查询以获取和设置标签/类别数组 - 但也许这是我唯一的选择?

【问题讨论】:

  • 您为什么要为此使用手动 SQL 查询?您可以在几分钟内编写一个 wordpress 页面来使用 wp_query()

标签: php mysql json wordpress


【解决方案1】:

如果您尝试通过 JSON 从 WordPress 检索信息,则将 WordPress 中的页面用作请求 URL 会更有意义:

假设 URL 是 yourwebsite.com/request/?posts_per_page=10;您使用该 slug 在 WordPress 中创建一个页面,然后使用其中仅包含以下代码的页面模板:

$parameters = array(
    'post_type' => 'post',
        'posts_per_page' => $_GET['posts_per_page']
    );
}
$requested_object = get_posts($parameters);

// if we have a request
if (!empty($requested_object)) {

    foreach ($requested_object as $post) :  setup_postdata($post); 

        // build the json request
        // you can make your arrays of tags & categories here
        $json_request[] = array(
            'id' => get_the_ID(),
            'title' => get_the_title(),
            'content' => apply_filters('the_content',$post->post_content)
        );

    endforeach;

    // return the json request
    header('Content-type: application/json');
    echo json_encode($json_request);

当您的 javascript 请求 /request/?posts_per_page=10 时,它将获得包含 10 个帖子和所有您想要的属性的 JSON。

【讨论】:

    【解决方案2】:

    不感兴趣的是 MYSQL 查询基于标签获取所有帖子:

    SELECT * FROM wp_posts
    LEFT JOIN wp_term_relationships
    ON wp_posts.ID = wp_term_relationships.object_ID
    LEFT JOIN wp_term_taxonomy
    ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
    LEFT JOIN wp_terms
    ON wp_terms.term_id = wp_term_taxonomy.term_id
    WHERE wp_terms.name = 'ford'
    

    【讨论】:

      【解决方案3】:

      就我而言,我这样做了:

      SELECT wp.ID, wp.post_title, wp.post_status, wt.slug, wtt.taxonomy, wtt.term_taxonomy_id, wtt.parent FROM wp2_posts wp
      INNER JOIN wp2_term_relationships wtr ON wp.ID = wtr.object_ID
      INNER JOIN wp2_term_taxonomy wtt ON wtr.term_taxonomy_id = wtt.term_taxonomy_id
      INNER JOIN wp2_terms wt ON wt.term_id = wtt.term_id
      WHERE wt.slug = 'tagname'
      AND wp.ID IN(
      SELECT wp2_posts.ID FROM wp2_posts
      INNER JOIN wp2_term_relationships
      ON wp2_posts.ID = wp2_term_relationships.object_ID
      INNER JOIN wp2_term_taxonomy
      ON wp2_term_relationships.term_taxonomy_id = wp2_term_taxonomy.term_taxonomy_id
      INNER JOIN wp2_terms
      ON wp2_terms.term_id = wp2_term_taxonomy.term_id
      WHERE wp2_terms.slug = 'categoryname')
      ORDER BY wp.ID ASC
      

      虽然它很臃肿,也许有人有更时尚的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-24
        • 1970-01-01
        相关资源
        最近更新 更多