我以更放松的心情再次环顾四周,发现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\',
) );
} );
感谢@马克·卡普伦在另一个答案中提出的建议。