通过WP REST JSON API在另一个PHP网站中显示受欢迎的帖子


9

我需要在同一域下的另一个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 );

我怎样才能做到这一点?


这已经被问过很多次了。请使用搜索。
kraftner 2015年

1.如果您有新问题,请打开一个新问题。在这种情况下,可能还可以,因为它不是全新的。无论如何,标题现在令人误解。2.您已经看到了以下文档:wp-api.org
kraftner 2015年

我也更新了标题,但是,我将
审阅

Answers:


8

我将使用WP API为此更新提供一个小解答。该API可以像在核心中一样使用WP_Query,但可以使用url中的get参数。

从发布状态中提取内容的URL如下所示:

http://example.com/wp-json/posts

要使用您惯用的WP_Query参数提取内容,可以这样做:

http://example.com/wp-json/posts?filter[posts_per_page]=2&filter[order]=ASC

您还可以在url中使用所有参数构建自定义查询。您会看到WP_Query用于标准WordPress循环的获取数据的方法感觉如何。如果您未指定参数,WP_Query则将使用默认值。

结果是json,您可以解析该json并将其用于外部站点。

有关更多参数和文档,另请参见API站点

更新为 date_query

API无法为查询创建结果query_date。有关所有可能的参数,请参阅文档

但是新版本将在几天,几周内发布。并参阅此问题以获取有关此日期查询解决方案的讨论。或者通过挂钩使用自定义过滤器,例如:

// 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_query

该API也不能使用默认WP-Query的此功能。但是您可以使用挂钩将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_query posts过滤器:

?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

元查询根据此答案进行更新。


您有任何想法如何将行转换'date_query' => array( array( 'after' => '1 week ago' ) ), 为查询字符串

我想接受这个作为答案,但是,如果您对以上评论有任何想法,可以分享您的想法。
Janith Chinthana

filter[posts_per_page]=2&filter[order]=ASC这两个以外的其他过滤器不起作用,因此它始终仅提供最新帖子
Janith Chinthana

@JanithChinthana我再次测试过,过滤器参数工作正常。-例如http://localhost/wpbeta/plugins/wp-json/posts?filter[posts_per_page]=1&filter[order]=ASC。我在下面的答案中有更多更新。
bueltge 2015年

感谢您的更新,是的post_per_pageorder正在工作,但是meta_key。它是否适用于此,或者我需要为此做些额外的工作?
Janith Chinthana
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.