webentwicklung-frage-antwort-db.com.de

Zeige beliebten Beitrag in einer anderen PHP-Website über WP REST JSON-API

Ich muss beliebte und aktuelle Posts auf einer anderen PHP Website unter derselben Domain anzeigen.

Beispiel:

  1. www.example.com -> hauptseite (php, mysql)
  2. www.example.com/blog -> WordPress-Blog

Es müssen beliebte, aktuelle Blog-Beiträge auf der Hauptwebsite angezeigt werden.

Bitte beachten Sie, dass Blog und Hauptwebsite zwei separate Datenbanken verwenden.

Ich habe mich dafür entschieden, das WP REST JSON API Plugin zu verwenden. Jetzt habe ich andere Fragen.

Ich benutze folgenden Code, um den populären Beitrag der letzten Woche abzurufen. Was ich eigentlich brauche, ist die gleichen Daten per API-Aufruf zu erhalten.

$args = array(
    'date_query' => array( array( 'after' => '1 week ago' ) ),  
    'posts_per_page' => $recent_posts_count,
    'ignore_sticky_posts' => 1,
    'meta_key' => 'post_views_count',
    'orderby' => 'meta_value_num',
    'order' => 'DESC'
);
$popularposts = new WP_Query( $args );

Wie kann ich das machen?

9

Ich werde Ihnen eine kurze Antwort auf Ihr Update geben und dies mit der WP API tun. Die API hat die Möglichkeit, die WP_Query wie auch im Core zu verwenden, allerdings über die get-Parameter in der URL.

Eine URL zum Abrufen von Inhalten aus dem Post-Status sieht folgendermaßen aus:

http://example.com/wp-json/posts

So rufen Sie Inhalte mit den gewohnten WP_Query-Parametern ab:

http://example.com/wp-json/posts?filter[posts_per_page]=2&filter[order]=ASC

Sie können Ihre benutzerdefinierte Abfrage mit allen Parametern auch in der URL erstellen. Sie können sehen, wie vertraut die Methode zum Abrufen dieser Daten mit der Verwendung von WP_Query für eine Standard-WordPress-Schleife ist. Wenn Sie keinen Parameter angeben, wird standardmäßig WP_Query verwendet.

Das Ergebnis ist json, das Sie analysieren und für Ihre externe Site verwenden können.

Siehe auch die Seite der API für weitere Parameter und Dokumentation.

Update für date_query

Die API kann kein Ergebnis für eine Abfrage wie query_date erstellen. In der Dokumentation finden Sie alle möglichen Parameter.

Aber die neue Version wird in Sicht Tagen, Wochen veröffentlicht. In diesem Problem finden Sie eine Diskussion über eine Lösung für diese Datumsabfrage. Alternativ können Sie auch einen benutzerdefinierten Filter über Hook verwenden, z. B .:

// Allow datequery in /posts filter
add_filter( "json_query_vars", function( $query_args ) {
    return array_merge( $query_args, 
        array( "date_query" => array( array( "after" => "1 week ago" ) ) )
    );
} );

Update für meta_query

Die API kann auch diese Funktion der Standard-WP-Query nicht. Sie können jedoch einen Hook verwenden, um die API auf diese Anforderung zu erweitern. Auch hier ein kleines Beispiel.

add_filter('json_query_var-meta_query', 'add_meta_query', 10, 1);

function add_meta_query( $data ){

    $args = array();
    $args['relation'] = 'AND';

    foreach ( $data as $key => $value ) {
        if ( 'relation' === $key ) {
            $args['relation'] = $data['relation'];
        }

        if ( substr($key, 0, 3) === 'key' ) {
            $arg_num = substr( $key, 3 );
            $args[ (int) $arg_num ][ 'key' ] = $value;
        }

        if (  substr( $key, 0, 7 ) === 'compare' ) {
            $arg_num_comp = substr( $key, 7 );
            $args[ (int) $arg_num_comp ][ 'compare' ] = $value;
        }
    }

    return $args;
}

Jetzt kann ich JSON so restful aufrufen, um den Wp_query-Posts-Filter nachzuahmen, der sich bereits auf dem Server befindet:

?filter[meta_query][key]=_newsml_categories_newsstream&filter[meta_query][key2]=homepage&filter[meta_query][relation]=AND&filter[meta_query][compare]=NOT%20EXISTS&filter[meta_query][compare2]=NOT%20EXISTS

Das Update der Meta-Abfrage basiert auf dieser Antwort .

8
bueltge