Meminta posting dari beberapa situs dalam jaringan?

8

Saya menyadari ada beberapa pertanyaan yang menari di sekitar solusi yang saya cari tetapi saya yakin saya sedang mencari sesuatu yang spesifik.

Ini sebenarnya adalah pertanyaan dua bagian:

1) Tujuan saya adalah membuat wordpress beroperasi dalam mode jaringan (multi-situs) dan saya mencoba mencari cara untuk secara esensial "mengelompokkan" situs-situs tertentu secara bersamaan. Saya mengetahui plugin "Multi-Jaringan" tetapi saya mempertanyakan apakah ini pendekatan terbaik untuk ini? Kuncinya di sini adalah untuk memungkinkan pengguna tertentu untuk menambah / mengedit situs dalam sub-jaringan mereka sendiri.

2) Ini adalah pertanyaan kunci dari posting ini ... Saya ingin tahu pendekatan terbaik yang memungkinkan saya untuk secara esensial meminta posting dari dalam "sub-jaringan" situs ini. Jadi, misalnya jika ada 10 situs dalam sub-jaringan ini dan masing-masing dari mereka membuat posting dalam jenis posting kustom yang disebut "berita" maka saya ingin kemampuan untuk menampilkan misalnya 10 posting yang paling baru diterbitkan dari koleksi 10 situs.

CATATAN: Saya memerlukan kemampuan untuk dapat membuat sub-jaringan multiply yang pada gilirannya berarti bahwa kueri "berita" yang diterbitkan terakhir hanya dapat menampilkan posting dari orang-orang yang termasuk dalam grup yang benar.

Akhirnya - Saya menyadari ada solusi untuk melakukan hal-hal seperti ini, tetapi saya mencari pendekatan terbaik pada kedua kasus yang membutuhkan jumlah beban / query database LEAST. Saya juga sangat ingin melakukan ini melalui kode di file functions.php saya daripada menginstal plugins yang membuat mengasapi ekstra.

Saya sangat terbuka untuk saran dan menghargai tanggapan apa pun.

NetConstructor.com
sumber

Jawaban:

7

Saya tahu Anda mengatakan Anda lebih suka tidak menginstal plug-in, tetapi itulah yang ingin Anda lakukan dalam situasi ini. Menempatkan kode dalam functions.phpfile tema Anda mengharuskan Anda untuk menggunakan tema yang sama di semua situs di sub-jaringan atau mempertahankan beberapa salinan dari file yang sama. Di sisi lain, Anda dapat membuat plug-in sederhana untuk jaringan untuk merangkum fungsionalitas, kemudian mengaktifkannya di jaringan , dan segera memiliki fungsi yang tersedia dengan hanya satu file untuk dipelihara. Ini sebenarnya akan membuat lebih sedikit mengasapi daripada tergantung pada functions.phpfile Anda .

Hal yang perlu diingat di sini adalah Anda harus mengulang-ulang setiap situs di jaringan untuk menemukan posting atau melakukan kueri khusus. Saya akan memilih rutin kedua karena, meskipun sedikit lebih rumit, ini adalah satu permintaan daripada permintaan yang berbeda untuk setiap blog.

Pada dasarnya ... Anda harus melakukan hal berikut:

  1. Dapatkan daftar semua ID blog di jaringan / sub-jaringan. Jika menggunakan instalasi vanilla, ini dapat ditemukan dalam wp_blogstabel. Cukup lakukan SELECTkueri sederhana untuk memuat array, maka Anda dapat mengulang untuk menambahkan setiap blog ke kueri utama Anda.
  2. Buat loop yang menambahkan setiap blog ke kueri besar. Anda harus JOINmenyatukan tabel dan mencari berdasarkan blog_id(dari wp_blogs), post_id(dari wp_BLOG_posts), dan taksonomi khusus.

Seperti yang saya katakan, ini bukan solusi sederhana (pernyataan SQL akan sangat rumit dan saya tidak punya waktu untuk meretasnya saat ini), tetapi itu akan menjadi pernyataan tunggal yang melakukan semua pekerjaan.

Kalau tidak ...

  1. Dapatkan daftar ID blog dan simpan dalam array.
  2. Iterasi melalui larik Anda yang menanyakan setiap blog di jaringan dan menambahkan kecocokan Anda (posting dengan istilah taksonomi tertentu) ke larik terpisah.

Dengan metode alternatif, Anda harus menjalankan kueri terpisah untuk setiap blog di jaringan. Jika jaringan Anda 10-20 situs, ini tidak terlalu menjadi masalah. Jika jaringan Anda 200-500 situs, perkirakan beberapa masalah kinerja akan mulai muncul.

Juga, Anda harus menyimpan hasil pencarian Anda jika mungkin. Jika dijalankan pada banyak halaman (mis. Untuk widget bilah sisi yang dibagikan di seluruh jaringan) maka Anda hanya ingin menjalankan kueri saat ada data baru yang didapat. Jika tidak, sajikan hasil yang di-cache agar Anda tidak memperlambat jaringan.

EAMann
sumber
Terimakasih atas tanggapan Anda. Saya suka ide Anda melakukannya melalui kueri sql khusus karena saya menganggap ini akan membuat beban lebih sedikit. Apa yang saya harapkan adalah Anda dapat menunjukkan kepada saya plugin apa yang akan Anda gunakan untuk membuat sub-jaringan ini yang dapat memiliki situs yang terkait dengannya dan mudah-mudahan ketika Anda memiliki waktu kueri sql yang harus digunakan seseorang untuk secara otomatis meminta semua posting dalam bahwa situs menetapkan sub-jaringan. Saya sangat menghargai waktu Anda
NetConstructor.com
3
Jika memungkinkan, silakan perbarui
NetConstructor.com
1

Saya punya masalah serupa. Saya perlu mendapatkan daftar posting di semua situs jaringan yang diurutkan berdasarkan komentar (untuk menampilkan posting paling populer). Ini adalah fungsi yang saya gunakan.

Dasarnya adalah bahwa ia pertama kali mendapatkan daftar semua id blog di jaringan Anda. Itu kemudian membangun permintaan tunggal besar (menggunakan UNION untuk menggabungkan semua baris dan tidak memerlukan BERGABUNG jelek) yang mendapat hasil yang berisi kolom blog_id, ID, dan comment_count. Menggunakan itu, saya kemudian menggunakan get_blog_post () untuk mendapatkan masing-masing posting informasi rinci.

Ada beberapa garis debug yang dapat Anda gunakan di titik yang berbeda untuk melihat apa yang terjadi.

function txx_top_posts_mu( $howMany = 10 ) {
global $wpdb;
global $table_prefix;

// get an array of the table names that our posts will be in
// we do this by first getting all of our blog ids and then forming the name of the 
// table and putting it into an array
$rows = $wpdb->get_results( "SELECT blog_id from $wpdb->blogs WHERE
    public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0';" );
if ( $rows ) :
    $blogPostTableNames = array();
    foreach ( $rows as $row ) :
        $blogPostTableNames[$row->blog_id] = $wpdb->get_blog_prefix( $row->blog_id ) . 'posts';
    endforeach;
    //print_r($blogPostTableNames);

    // now we need to do a query to get all the posts from all our blogs
    // ordered by the number of comments and with limits applied
    if ( count( $blogPostTableNames ) > 0 ) :
        $query = '';
        $i = 0;
        foreach ( $blogPostTableNames as $blogId => $tableName ) :
            if ( $i > 0 ) :
                $query.= ' UNION ';
            endif;
            $query.= " SELECT ID, comment_count, $blogId as `blog_id` FROM $tableName ";
            $i++;
        endforeach;
        $query.= " ORDER BY comment_count DESC LIMIT 0,$howMany;";
        //echo $query;
        $rows = $wpdb->get_results( $query );

        // now we need to get each of our posts into an array and return them
        if ( $rows ) :
            $posts = array();
            foreach ( $rows as $row ) :
                $posts[] = get_blog_post( $row->blog_id, $row->ID );
            endforeach;
            //print_r($posts);
            return $posts;
        endif;
    endif;
endif;
return false;

}


sumber
-1

Anda pasti membutuhkan plugin jaringan multisite. Ada tiga untuk dipilih saat ini: dua dibayar, satu gratis.

Dari sana, Anda dapat menggunakan sesuatu seperti plugin tag situs web untuk menarik posting ke blog utama di setiap jaringan.

Tak satu pun dari ini bisa (atau harus) dilakukan dari file fungsi tema.

andrea_r
sumber
apa saja yang dibayar yang Anda maksud?
NetConstructor.com
1
dan dibayar: (saya) wpebooks.com/networks
Andrea_R
-3

buat mesin pencari google khusus google.com/cse tentukan semua situs yang ingin Anda cari

sematkan di situs web Anda

mireille raad
sumber
@mirelle - tapi ini pasti bukan jawaban yang saya cari
NetConstructor.com