通过WP REST JSON API在另一个php网站上显示热门帖子

时间:2015-04-28 作者:Janith Chinthana

我需要展示流行的&;最近在同一域下的另一个PHP网站上发布的帖子。

示例:

  1. www.example.com -> 主网站(php、mysql)
  2. www.example.com/blog -> WordPress博客需要在主网站上显示最近流行的博客帖子。

    请注意,博客和主网站使用两个独立的数据库。

    我决定使用WP REST JSON API 插件。现在我有不同的问题。

    我使用以下代码检索上周的热门帖子。我实际上需要的是通过API调用获取相同的数据。

    $args = array(
        \'date_query\' => array( array( \'after\' => \'1 week ago\' ) ),  
        \'posts_per_page\' => $recent_posts_count,
        \'ignore_sticky_posts\' => 1,
        \'meta_key\' => \'post_views_count\',
        \'orderby\' => \'meta_value_num\',
        \'order\' => \'DESC\'
    );
    $popularposts = new WP_Query( $args );
    
    我该怎么做?

1 个回复
最合适的回答,由SO网友:bueltge 整理而成

我将为您的更新提供一个小的答案,使用WP API.API可以像在core中一样使用WP\\u查询,但是关于url中的get参数。

从帖子状态提取内容的URL如下所示:

http://example.com/wp-json/posts
要使用您习惯的WP\\U查询参数提取内容,可以这样做:

http://example.com/wp-json/posts?filter[posts_per_page]=2&filter[order]=ASC
您可以使用url中的所有参数构建自定义查询。您可以看到使用这种方法获取数据的感觉如何WP_Query 对于标准WordPress循环。如果未指定参数,则默认值为WP_Query 将使用。

结果是json,您可以为外部站点解析和使用它。

另请参见site of the API 有关更多参数和文档。

更新的date_query

API无法为以下查询创建结果query_date. 请参见documentation 对于所有可能的参数。

但新版本将在几天、几周后发布。看看这个issue 有关此日期查询的解决方案的讨论。或者通过挂钩使用自定义过滤器,如:

// Allow datequery in /posts filter
add_filter( "json_query_vars", function( $query_args ) {
    return array_merge( $query_args, 
        array( "date_query" => array( array( "after" => "1 week ago" ) ) )
    );
} );
更新meta_queryAPI也不能使用默认WP查询的此功能。但是您可以使用钩子来增强API以满足此需求。这里还有一个小例子。

add_filter(\'json_query_var-meta_query\', \'add_meta_query\', 10, 1);

function add_meta_query( $data ){

    $args = array();
    $args[\'relation\'] = \'AND\';

    foreach ( $data as $key => $value ) {
        if ( \'relation\' === $key ) {
            $args[\'relation\'] = $data[\'relation\'];
        }

        if ( substr($key, 0, 3) === \'key\' ) {
            $arg_num = substr( $key, 3 );
            $args[ (int) $arg_num ][ \'key\' ] = $value;
        }

        if (  substr( $key, 0, 7 ) === \'compare\' ) {
            $arg_num_comp = substr( $key, 7 );
            $args[ (int) $arg_num_comp ][ \'compare\' ] = $value;
        }
    }

    return $args;
}
现在,我可以这样调用JSON restful来模拟服务器上已有的Wp\\U查询帖子过滤器:

?filter[meta_query][key]=_newsml_categories_newsstream&filter[meta_query][key2]=homepage&filter[meta_query][relation]=AND&filter[meta_query][compare]=NOT%20EXISTS&filter[meta_query][compare2]=NOT%20EXISTS
元查询更新基于this answer.

结束

相关推荐

插件中的AJAX调用返回的比JSON更多

我有一个插件tat extendeds Gravity Forms,由一个PHP文件和一个JS文件组成。可以在以下位置找到PHP文件:http://pastebin.com/VUX5AfLPJS文件可在此处找到:http://pastebin.com/CTjQEKzY我试图使用带有回调的WP-AJAX返回json编码的结果来填充我的重力表单。我遇到的问题是,我没有将JSON编码的对象返回到AJAX回调,而是得到了整个injuryFilter();来自的函数<script> 到</scri