Как получить рейтинг просмотра по API в CMS (Nuxt. js + WordPress) - PullRequest
0 голосов
/ 11 февраля 2020

Я создаю 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>

Пожалуйста, скажите мне, что я должен сделать для достижения вышеизложенного. (Я могу использовать другие плагины.)

1 Ответ

0 голосов
/ 11 февраля 2020

Я решил сам. Плагин WordPress Popular Posts позволяет подсчитывать количество просмотров через API.

Ссылочный URL: https://wordpress.org/support/topic/wpp-with-an-ajax-based-site/

Я исправил "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);

    // WordPress Popular Posts Counts Up Visits
    $axios.$post(
      'http://example.com/wp-json/wordpress-popular-posts/v1/popular-posts?wpp_id=' +
        params.id,
    )

    return { article };
  }
}
<script>

...