Domanda

Mi rendo conto che ci sono stati un paio di domande che danza intorno alla soluzione che ho del mattino dopo, ma credo che sto cercando qualcosa di specifico.

Questo è in realtà una domanda in due parti:

1) Il mio obiettivo è di avere wordpress operano in modalità di rete (multi-sito) e sto cercando di capire un modo per essenzialmente siti specifici "gruppo" insieme. Sono consapevole del plugin "Multi-Network" ma mi domanda se questo è l'approccio migliore per questo? La chiave qui è quello di consentire agli utenti specifici di aggiungere / modificare i siti all'interno della propria sottorete.

2) Questa è la domanda chiave di questo post ... Mi piacerebbe sapere l'approccio migliore che mi permettesse di essenzialmente di query messaggi all'interno di questo "sotto-rete" di siti. Così, per esempio, se ci sono 10 siti all'interno di questo sub-network e ciascuno di essi creati posti all'interno di un tipo di messaggio personalizzato chiamato "news", allora mi piacerebbe la possibilità di visualizzare ad esempio i 10 post più recentemente pubblicati da questa raccolta di 10 siti.

. NOTA: ho bisogno della capacità di essere di essere in grado di creare moltiplicano sotto-reti che nei mezzi sua volta che una query delle ultime "news", pubblicato in grado di visualizzare solo i messaggi di quelli appartenenti al gruppo corretto

Infine - faccio esistono soluzioni realizzare per fare cose come questo, ma sto cercando l'approccio migliore in entrambi i casi che richiedono il minor carico di di database / query. Vorrei anche molto simile a farlo tramite il codice nel mio file functions.php piuttosto che l'installazione di plugin che creano gonfiare supplementare.

Sono molto aperto a qualsiasi suggerimento e apprezzare alcuna risposta.

È stato utile?

Soluzione

Lo so che detto che non preferisce installare un plug-in, ma questo è esattamente ciò che si vuole fare in questa situazione. L'inserimento del codice nel file di functions.php del vostro tema richiede di utilizzare a uno stesso tema in tutti i siti nel sotto-rete o mantenere più copie dello stesso file. D'altra parte, è possibile creare un semplice plug-in per la rete per incapsulare la funzionalità, quindi attivare sulla rete , e subito hanno la funzionalità disponibili con un solo file da mantenere. Questo sarebbe in realtà creare meno gonfiare oltre a seconda delle vostre file functions.php.

La cosa da tenere a mente è che si sta andando a sia necessità di ciclo attraverso ogni sito della rete per trovare i tuoi messaggi o eseguire una query personalizzata. Mi piacerebbe optare per la seconda di routine, perché, anche se è un po 'più complicato, si tratta di una singola query piuttosto che una query diversa per ogni blog.

In sostanza ... dovrete effettuare le seguenti operazioni:

  1. Ottenere un elenco di tutti gli ID del blog nella / sottorete della rete. Se si utilizza un impianto di vaniglia, questo può essere trovato nella href="http://codex.wordpress.org/Database_Description#Table%3a_wp_blogs"> wp_blogs tavolo . Basta fare una semplice query SELECT di caricare un array, allora si può collegare attraverso aggiungere ogni blog alla tua richiesta principale.
  2. Crea un ciclo che aggiunge ogni blog a una query di grandi dimensioni. Avrete bisogno di essere JOINing tavoli insieme e la ricerca in base a blog_id (da wp_blogs), post_id (da wp_BLOG_posts), e la tassonomia personalizzato.

Come ho detto, non è una soluzione semplice (l'istruzione SQL sarà molto complicata e non ho il tempo di incidere attraverso di essa al momento), ma sarà una singola istruzione che fa tutto il lavoro.

In alternativa ...

  1. Ottenere un elenco degli ID blog e conservarlo in un array.
  2. Scorrere la matrice interrogare ogni blog in rete e aggiungendo le partite (post con un certo termine tassonomia) ad un array separato.

Con il metodo alternativo dovrete eseguire una query separata per ogni blog in rete. Se la rete è di 10-20 siti di questo non è troppo di un problema. Se la rete è 200-500 siti si aspettano alcuni problemi di prestazioni per iniziare a saltar fuori.

Inoltre, si dovrebbe memorizzare nella cache i risultati della query, se possibile. Se è in esecuzione su più caricamento della pagina (vale a dire per una barra laterale widget di condivisione in rete), allora si vuole solo per eseguire la query quando c'è nuovi dati per ottenere. In caso contrario, servire i risultati memorizzati nella cache in modo da non rallentare la rete.

Altri suggerimenti

Ho avuto un problema simile. Avevo bisogno di ottenere un elenco di messaggi in tutti i siti della rete Weaver commenti (per visualizzare i post più popolari). Questa è la funzione che ho usato.

La base è che prima ottiene un elenco di tutti gli ID del blog della rete. Si costruisce quindi una grande interrogazione singolo (utilizzando UNION per combinare tutte le righe e non richiedono brutta unisce) che ottiene un risultato contenente le colonne blog_id, ID, e COMMENT_COUNT. Utilizzando che, Ho quindi utilizzare get_blog_post () per ottenere ciascuno dei posti informazioni dettagliate.

Ci sono alcune linee di debug che è possibile utilizzare in punti diversi per vedere cosa sta succedendo.

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;

}

È assolutamente necessario avere multisito plugin di rete. Ci sono tre tra cui scegliere al momento:. Due pagato, uno libero

Da lì, si può usare qualcosa come i tag in tutto il sito plugin per posta tirare al blog principale di ogni rete.

Nessuno di questi potrebbe essere (o dovrebbe essere) fatta dal file funzioni di un tema.

costruire un motore di ricerca Google Custom google.com/cse specificare tutti i siti che si desidera cercare

incorporarlo nel vostro sito web

scroll top