Wie kann ich Postsichten von REST-API-Aufrufen zählen und sie in einem ACF-Feld aktualisieren?

Ich weiß nicht, ob ich die Dinge etwas kompliziert habe, also erkläre ich die Dinge von oben. Ich habe eine benutzerdefinierte Post-Art (News) eingerichtet, die über die REST-API verfügbar gemacht wird. Der Hauptendpunkt ( /wp-json/wp/v2/news ) gibt eine Liste von news , die nach Beliebtheit sortiert werden müssen. Ich habe ein paar Post-View-Zähl-Plugins ausprobiert, aber keine von ihnen scheint über die REST-API zu funktionieren (sie funktionieren nur, wenn das Theme den Beitrag rendert).

Mein Plan ist es, ein ACF-Feld für die Anzahl der Aufrufe zu erstellen und in die REST-API-Init für einen Post (oder nur für meinen news ) einzubinden und den Wert für dieses ACF-Feld zu aktualisieren. Ich sollte dann in der Lage sein, eine Liste der bestellten Artikel nach der Anzahl der Aufrufe anzufordern.

Ich habe anscheinend Lösungen für einige der Aufgaben gefunden, aber ich kann das grundlegende nicht herausfinden: Wie kann ich in WP einhaken, wenn eine REST-API-Anfrage für einen bestimmten Post-Typ gemacht wird und wie kann ich das benutzerdefinierte Feld aktualisieren? an diesem Punkt?

ACF ist kein integraler Bestandteil dieser Abfrage. Es ist in Ordnung, ein benutzerdefiniertes natives Feld zu verwenden. Wenn jedoch meine Frage zum Hook beantwortet wird, ist der Feldtyp irrelevant.

Solutions Collecting From Web of "Wie kann ich Postsichten von REST-API-Aufrufen zählen und sie in einem ACF-Feld aktualisieren?"

Ich schaute mich wieder mit einem entspannteren Geist um und fand heraus, dass the_posts der the_posts war, nach dem ich suchte. So habe ich es gerade gemacht:

 add_action( 'the_post', function ( $post ) { $count = (int) get_field('views'); $count++; update_field('views', $count); } ); 

Jetzt werde ich herausfinden, wie man es nach einem ACF-Feld sortiert …

Update: Nein, das wird nicht funktionieren, weil the_post in der Hauptabfrage /news/ für jedes der 10 Elemente läuft, so würde sogar das Erhalten des Index die the_post der the_post erhöhen. Zurück zum Zeichenbrett…

Update 2: Meine letzte Idee ist es, immer noch den oben the_post Hook zu verwenden, aber indem ich einen ?index=true Parameter hinzufüge, der nur mit dem /news/ Endpunkt spezifiziert wird, z. /news?index=true . Ich werde dann die Hook-function aktualisieren, um nur dann eine Ansicht zu zählen, wenn kein Indexabfragezeichenfolgenparametersatz vorhanden ist. Schließlich hänge ich mich in die WP_Query ein und sortiere die Items nach Anzahl, bevor sie verschickt werden. Wenn das nicht funktioniert, zerstöre ich das ganze Verzeichnis und baue die App von Grund auf mit Laravel.

Update 3: Ich denke, die letzte Idee ist wahrscheinlich nicht der sauberste oder der richtige Weg, dies zu tun. Ich habe schließlich einen benutzerdefinierten Endpunkt nur zum Zählen der Ansichten hinzugefügt und akzeptiert, dass dies eine benutzerdefinierte functionalitätsanforderung ist. Ich habe es so gemacht:

 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\d+)', array( 'methods' => 'GET', 'callback' => 'aalaap_count_view', ) ); } ); 

Danke @ Mark-Kaplun für den Vorschlag in der anderen Antwort.

Im Allgemeinen sollten Sie, wenn Sie Ihre eigene spezielle Behandlung benötigen, nur Ihren eigenen Endpunkt implementieren. Es wird deutlicher, je mehr der kanonische Endpunkt verwendet wird. In Ihrem Fall, wenn Sie die Ausgabe dieses Endpunktes ändern, können Sie ihn nicht in anderen Plugins verwenden, die erwarten, dass er eine Liste mit Veröffentlichungszeit zurückgibt.