問題描述
我需要展示流行& 最近在另一個 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。