Tampilkan pos populer di situs web php lain melalui WP REST JSON API

9

Saya perlu menampilkan posting populer & terkini di situs web PHP lain di bawah domain yang sama.

Contoh:

  1. www.example.com -> situs web utama (php, mysql)
  2. www.example.com/blog -> blog WordPress

Perlu menunjukkan posting blog yang populer dan terbaru di situs web utama.

Harap dicatat bahwa blog dan situs web utama menggunakan dua basis data yang terpisah.

Saya memutuskan untuk menggunakan plugin WP REST JSON API untuk itu. Sekarang saya punya pertanyaan berbeda.

Saya menggunakan kode berikut untuk mengambil posting populer minggu lalu. Apa yang sebenarnya saya butuhkan adalah untuk mendapatkan data yang sama ini melalui panggilan API.

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

Bagaimana saya bisa melakukan itu?

Janith Chinthana
sumber
Ini telah ditanyakan berkali-kali. Silakan gunakan pencarian.
kraftner
1. Jika Anda memiliki pertanyaan baru, harap buka pertanyaan baru. Dalam hal ini mungkin tidak apa-apa karena tidak sepenuhnya baru. Lagi pula judulnya menyesatkan sekarang. 2. Anda telah melihat dokumentasinya: wp-api.org
kraftner
Saya telah memperbarui judul juga, namun saya akan pergi melalui doc, terima kasih
Janith Chinthana

Jawaban:

8

Saya akan memberi Anda jawaban kecil untuk pembaruan Anda, melakukan ini dengan WP API . API memiliki kemungkinan untuk menggunakan WP_Query seperti juga di inti, tetapi tentang parameter get di url.

URL untuk menarik konten dari Status Posting akan terlihat seperti ini:

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

Untuk menarik konten dengan parameter WP_Query yang biasa Anda gunakan, Anda bisa melakukannya seperti ini:

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

Anda dapat membuat kueri khusus dengan semua parameter juga di url. Anda dapat melihat bagaimana metode untuk mengambil data yang terasa biasa digunakan WP_Queryuntuk loop WordPress standar. Jika Anda tidak menentukan parameter, standar untuk WP_Queryakan digunakan.

Hasilnya adalah json, yang dapat Anda parse dan gunakan untuk situs eksternal Anda.

Lihat juga situs API untuk lebih banyak parameter dan dokumentasi.

Perbarui untuk date_query

API tidak dapat membuat hasil untuk kueri seperti query_date. Lihat dokumentasi untuk semua parameter yang mungkin.

Tetapi versi baru akan dirilis dalam beberapa hari, minggu. Dan lihat masalah ini untuk diskusi tentang solusi untuk kueri tanggal ini. Alternatif menggunakan filter khusus melalui kait, seperti:

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

Perbarui untuk meta_query

API juga tidak bisa fitur WP-Query default ini. Tetapi Anda dapat menggunakan pengait untuk meningkatkan API ke persyaratan ini. Juga di sini contoh kecil.

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

Sekarang, saya dapat memanggil JSON dengan tenang seperti itu untuk meniru filter posting Wp_query yang sudah ada di server:

?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

Pembaruan permintaan meta berdasarkan dari jawaban ini .

bueltge
sumber
Apakah Anda tahu cara mengonversi baris 'date_query' => array( array( 'after' => '1 week ago' ) ), sebagai string kueri
Janith Chinthana
Saya ingin menerima ini sebagai jawaban, namun jika Anda memiliki ide mengenai komentar di atas, Anda dapat membagikan pemikiran Anda.
Janith Chinthana
filter selain dari filter[posts_per_page]=2&filter[order]=ASCdua ini tidak berfungsi, jadi selalu memberikan pos terbaru saja
Janith Chinthana
@ JanithChinthana Saya telah menguji lagi, param filter bekerja dengan baik. - Sebagai Contoh http://localhost/wpbeta/plugins/wp-json/posts?filter[posts_per_page]=1&filter[order]=ASC. Jauh lebih banyak di pembaruan saya di bawah ini dalam jawabannya.
bueltge
terima kasih atas pembaruannya, ya post_per_page& orderberfungsi, tapi bagaimana meta_key. apakah ini bekerja dengan ini atau saya perlu kerja ekstra untuk itu?
Janith Chinthana