从Wordpress获取所有帖子作为JSON

时间:2014-02-12 14:20:49

标签: php wordpress

我正在尝试使用post_type“product”从我的Wordpress网站获取所有帖子。

我尝试过以下但不起作用。

<?php
$args = array( 'post_type' => 'product', 'post_status' => 'publish');

$loop = new WP_Query( $args );

$array = array();

while ( $loop->have_posts() ) : $loop->the_post();

    global $product;
    $array[] = array(
        'id' => get_the_ID(),
        'title' => get_the_title()
    );

endwhile;

wp_reset_query();
ob_clean();
echo json_encode($array);
exit();
?>

虽然当我将'posts_per_page' => 450添加到$args时,它会返回该类型的帖子,但是如果我添加一个高于450的值(如500),它将不再返回任何内容。

我正在使用它遍历所有产品帖子,并将名称,价格等添加到循环中的数组中。

如何修复$args以获取所有产品信息。

修改

我最近也尝试过:

<?php
    $args="SELECT * FROM wp_posts WHERE wp_posts.`post_type` = 'product' AND wp_posts.`post_status` = 'publish'";

    $loop = get_results( $args );

    $array = array();

    while ( $loop->have_posts() ) : $loop->the_post();

        global $product;
        $array[] = array(
            'id' => get_the_ID(),
            'title' => get_the_title()
        );

    endwhile;

   // wp_reset_query();
    ob_clean();
    echo json_encode($array);
    exit();
    ?>

7 个答案:

答案 0 :(得分:11)

这里不需要模拟循环。这是最直接的方式:

$args = array( 
    'post_type' => 'product', 
    'post_status' => 'publish', 
    'nopaging' => true 
);
$query = new WP_Query( $args ); // $query is the WP_Query Object
$posts = $query->get_posts();   // $posts contains the post objects

$output = array();
foreach( $posts as $post ) {    // Pluck the id and title attributes
    $output[] = array( 'id' => $post->ID, 'title' => $post->post_title );
}
echo json_encode( $output );

或者您可以省略foreachecho json_encode( $posts );以获取帖子的所有属性。

答案 1 :(得分:3)

请查看表格中的数据。是否有邮政类型产品的帖子。如果是,则简单查询应该起作用

SELECT * FROM $wpdb->posts WHERE $wpdb->posts.`post_type` = 'product' AND $wpdb->posts.`post_status` = 'publish'

您可以直接在phpmyadmin中运行此代码。并查看是否有任何帖子。请将$ wpdb替换为表格的前缀。

答案 2 :(得分:3)

<?php
//this file is in main folder and it works for me(yourWordpressWebsite.com/yourFile.php)

$path = $_SERVER['DOCUMENT_ROOT'];
include_once $path . '/wp-config.php';
include_once $path . '/wp-load.php';
include_once $path . '/wp-includes/wp-db.php';
include_once $path . '/wp-includes/pluggable.php';

global $wpdb;
$posts = $wpdb->get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_status = 'publish' AND post_type='post'");

echo json_encode($posts);
exit();
?>   

输出: [{“ID”:“1”,“post_title”:“Hello world!”},{“ID”:“63”,“post_title”:“Blockquote Post”} ...

答案 3 :(得分:1)

这是您在查询中显示所有帖子的方式:'posts_per_page' => -1 - 因此您的查询将变为:

$args = array( 'post_type' => 'product', 'posts_per_page' => -1 );
$loop = new WP_Query( $args );

答案 4 :(得分:1)

据我所知,你需要获得手动查询的帖子,

就像这样,

global $wpdb;
$args = "SELECT * FROM $wpdb->posts WHERE $wpdb->posts.`post_type` = 'product' AND $wpdb->posts.`post_status` = 'publish' ORDER BY $wpdb->posts.`ID`";
$loop = $wpdb->get_results( $args );

根据我的经验,'posts_per_page' => -1不会返回所有帖子,我不知道为什么。 不知何故wordpress没有从数据库返回超过5001000个帖子......

答案 5 :(得分:1)

您可以尝试使用为此目的而开发的插件。这个列在WordPress.org网站上,似乎它可以帮到你。

<强> JSON API

最好先检查WordPress.org托管的插件

答案 6 :(得分:0)

$ args = array('posts_per_page'=&gt; -1,'post_type'=&gt;'product');

$ myposts = get_posts($ args);

echo json_encode($ myposts);

我认为这应该有用