Я создаю CMS для блога на Nuxt. js (На переднем крае). CMS использует WordPress в качестве бэкэнда и использует «WP REST API» для отображения статей в Nuxt. js. (Потому что я хочу сократить время, затрачиваемое на создание экрана управления с помощью WordPress.)
Здесь есть функция, которую необходимо реализовать. Это рейтинг просмотра статей.
Используйте следующие плагины и код для извлечения статей с сайта в порядке количества просмотров.
Плагин: популярные сообщения WordPress https://wordpress.org/plugins/wordpress-popular-posts/
Я добавил следующий код в функции. php в WordPress
class WPP_REST_Controller {
public function __construct() {
$this->namespace = '/wpp';
$this->resource_name = '/posts';
}
public function register_routes() {
register_rest_route( $this->namespace , $this->resource_name, array(
'methods' => 'GET',
'callback' => array($this, 'get_wpp'),
) );
}
public function get_wpp( $request ) {
if (function_exists('wpp_get_mostpopular')) {
$args = array(
'limit' => 10,
'stats_views' => 0,
'wpp_start' => '{',
'wpp_end' => '}',
'post_html' => '{pid},',
);
ob_start();
wpp_get_mostpopular( $args );
$str = ob_get_contents();
ob_end_clean();
$str = str_replace("\n", '', $str);
preg_match('/\{(([0-9]*,)*)\}/s', $str, $match);
if (count($match)) {
$ids = rtrim($match[1], ',');
$url = get_bloginfo('url') . '/wp-json/wp/v2/posts?include=' . $ids;
header("Location: " . $url);
exit;
}
}
}
}
function prefix_register_my_rest_routes() {
$controller = new WPP_REST_Controller();
$controller->register_routes();
}
add_action( 'rest_api_init', 'prefix_register_my_rest_routes' );
Nuxt. js (рейтинг. vue):
<template>
{{top_articles}}
</template>
<script>
export default {
data() {
return {
top_articles
};
},
async asyncData({ $axios, params }) {
const top_articles = await $axios.$get('http://example.com/wp-json/wpp/posts');
}
</script>
Но есть проблема. Количество статей, просматриваемых через Nuxt. js не отражено в ответах API.
Страница отображения статьи выглядит следующим образом:
Nuxt. js (article / _id. vue)
<template>
{{ article }}
</template>
<script>
export default {
data() {
return {
article: this.article,
}
},
async asyncData({ $axios, params }) {
const article = await $axios.$get('http://example.com/wp-json/wp/v2/posts/' + params.id);
return { article };
}
}
<script>
Пожалуйста, скажите мне, что я должен сделать для достижения вышеизложенного. (Я могу использовать другие плагины.)