问题描述
我需要展示流行& 最近在另一个 PHP 网站的同一个域的帖子。
例:
-
www.example.com
– > 主要网站 (php,mysql) -
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 );
我怎样才能做到这一点?
最佳解决方案
我会给你一个小的答案你的更新,这样做与 WP API 。 API 有可能使用 WP_Query,也像在 core 中一样,但是关于 url 中的 get 参数。
从 Post Status 中拉取内容的网址如下所示:
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,你可以解析和使用你的外部站点。
另请参见 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_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 帖子过滤器:
?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 的元查询更新。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。