如何计算REST API调用的POST视图并在ACF字段中更新它们?

时间:2017-09-28 作者:aalaap

我不知道我是否把事情弄得有点复杂,所以我会从头开始解释。我设置了一个自定义帖子类型(news),它通过RESTAPI公开。主要端点(/wp-json/wp/v2/news) 返回news 需要按流行程度排序的项目。我尝试了一些post-view-count插件,但它们似乎都无法通过REST API工作(它们只在主题呈现帖子时工作)。

我的计划是创建一个“视图计数”ACF字段,并为一篇文章(或仅为我的news 键入),并更新该ACF字段的值。然后,我应该能够请求按视图计数排序的项目列表。

我似乎已经找到了一些涉及到的任务的解决方案,但我无法找到基本的解决方案:当对特定的post类型发出REST API请求时,我如何连接到WP,以及如何在此时更新自定义字段?

ACF不是此查询的一个组成部分-我可以使用本机自定义字段,但如果回答了我关于挂钩的问题,则字段类型无关紧要。

2 个回复
SO网友:aalaap

我以更放松的心情再次环顾四周,发现the_posts 是我一直在寻找的动作钩。我就是这样做的:

add_action(
    \'the_post\',
    function ( $post ) {
        $count = (int) get_field(\'views\');
        $count++;
        update_field(\'views\', $count);
    }
);
现在,我只想知道如何按ACF字段对其进行排序。。。

Update: 不,这行不通,因为the_post 在主查询中运行10次/news/ 对于这10项中的每一项,即使获得索引也会增加视图数量。回到绘图板。。。

Update 2: 我的最终想法是仍然使用the_post 如上所述,通过添加?index=true 参数,该参数将仅使用/news/ 端点,例如。/news?index=true. 然后,我将更新挂钩函数,以仅在没有index 查询字符串参数集。最后,我将连接到主WP\\u查询,并在发送之前按计数对项目进行排序。如果这不起作用,我将破坏整个目录,并使用Laravel从头开始构建应用程序。

Update 3: 我认为最后一个想法可能不是最干净或正确的方法。最后,我添加了一个自定义端点,仅用于计算视图,并接受这是一个自定义功能需求。我是这样做的:

function aalaap_count_view( $data ) {
    $post = get_post( $data[\'id\'] );

    if ( empty( $post ) ) {
        return new WP_Error( \'aalaap_post_not_found\', \'Invalid post\', array( \'status\' => 404 ) );
    }

    // Now update the ACF field (or whatever you wish)
    $count = (int) get_field(\'views\', $post->ID);
    $count++;
    update_field(\'views\', $count, $post->ID);

    return new WP_REST_Response($count);
}

add_action( \'rest_api_init\', function () {
    register_rest_route( \'aalaap/v1\', \'/countview/(?P<id>\\d+)\', array(
        \'methods\' => \'GET\',
        \'callback\' => \'aalaap_count_view\',
    ) );
} );
感谢@马克·卡普伦在另一个答案中提出的建议。

SO网友:Mark Kaplun

一般来说,如果你需要自己的特殊待遇,你应该实现自己的终点。规范端点的使用率越高,这一点就越明显。在您的情况下,如果您更改该端点的输出,您将无法在其他插件中使用它,这些插件期望它返回按发布时间排序的列表。

结束