WP REST JSON API ile başka bir php web sitesinde popüler yayını göster


9

Aynı alan adı altında başka bir PHP web sitesinde popüler ve son mesajları göstermem gerekiyor.

Misal:

  1. www.example.com -> ana web sitesi (php, mysql)
  2. www.example.com/blog -> WordPress blogu

Popüler, son blog yayınlarını ana web sitesinde göstermeniz gerekiyor.

Blog ve ana web sitesinin iki ayrı veritabanı kullandığını lütfen unutmayın.

Bunun için WP REST JSON API eklentisini kullanmaya karar verdim . Şimdi farklı bir sorum var.

Geçen hafta popüler yazı almak için aşağıdaki kodu kullanın. Aslında ihtiyacım olan bu aynı veri API çağrısı yoluyla elde etmektir.

$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 );

Bunu nasıl yapabilirim?


Bu birçok kez sorulmuştur. Lütfen aramayı kullanın.
kraftner

1. Yeni bir sorunuz varsa lütfen yeni bir soru açın. Bu durumda tamamen yeni olmadığı için sorun olabilir. Her neyse, başlık şu anda yanıltıcı. 2. Belgeleri gördünüz: wp-api.org
kraftner

Başlığı da güncelledim, ancak doktora gideceğim, teşekkürler
Janith Chinthana

Yanıtlar:


8

Güncellemeniz için size WP API ile küçük bir cevap vereceğim . API, WP_Query'yi çekirdekte olduğu gibi kullanmak için olanaklara sahiptir, ancak url'deki get parametreleri hakkında.

Posta Durumu'ndan içerik çekmek için bir URL şöyle görünecektir:

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

Alıştığınız WP_Query parametreleriyle içerik çekmek için şu şekilde yapabilirsiniz:

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

Özel sorgunuzu URL'de de tüm parametrelerle oluşturabilirsiniz. Verileri yakalama yönteminin WP_Querystandart bir WordPress döngüsü için nasıl tanıdık geldiğini görebilirsiniz . Bir parametre belirtmezseniz, varsayılan değerler WP_Querykullanılır.

Sonuç, harici siteyi ayrıştırabileceğiniz ve kullanabileceğiniz json'dur.

Daha fazla parametre ve dokümantasyon için API'nın sitesine de bakın .

İçin güncelleme date_query

API, gibi bir sorgu için sonuç oluşturamaz query_date. Olası tüm parametreler için belgelere bakın .

Ancak yeni sürüm görünüm günleri, haftalar içinde yayınlanacak. Ve bu tarih sorgusuna yönelik bir çözüm hakkında tartışma için bu konuya bakın . Alternatif olarak, kanca ile özel bir filtre kullanın, örneğin:

// 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" ) ) )
    );
} );

İçin güncelleme meta_query

API, varsayılan WP Sorgusunun bu özelliğini de kullanamaz. Ancak API'yı bu gereksinime göre geliştirmek için bir kanca kullanabilirsiniz. Ayrıca burada küçük bir örnek.

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;
}

Şimdi, zaten sunucuda Wp_query mesajlar filtresini taklit etmek için JSON böyle huzurlu çağırabilirsiniz:

?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

Bu soruyu temel alan meta sorgu güncellemesi .


Hattı 'date_query' => array( array( 'after' => '1 week ago' ) ), bir sorgu dizesi olarak dönüştürmek için herhangi bir fikriniz var mı
Janith Chinthana

Bunu bir cevap olarak kabul etmek istiyorum, ancak yukarıdaki yorum hakkında herhangi bir fikriniz varsa, düşüncelerinizi paylaşabilirsiniz.
Janith Chinthana

filter[posts_per_page]=2&filter[order]=ASCbu ikisi dışındaki filtreler çalışmıyor, bu yüzden her zaman sadece son mesajları veriyor
Janith Chinthana

@JanithChinthana Tekrar test ettim, filtre parametresi iyi çalışıyor. - Örnek olarak http://localhost/wpbeta/plugins/wp-json/posts?filter[posts_per_page]=1&filter[order]=ASC. Cevabım aşağıdaki güncellememde çok daha fazlası.
bueltge

güncelleme için teşekkürler, evet post_per_pageve orderçalışıyor, ama ne olacak meta_key. bununla çalışır mı yoksa bunun için fazladan çalışmam gerekir mi?
Janith Chinthana
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.