Consultando postagens de vários sites em uma rede?

8

Sei que houve algumas perguntas que dançam em torno da solução que estou buscando, mas acredito que estou procurando algo específico.

Esta é realmente uma questão de duas partes:

1) Meu objetivo é fazer com que o wordpress opere no modo de rede (vários sites) e estou tentando descobrir uma maneira de essencialmente "agrupar" sites específicos. Estou ciente do plug-in "Multi-Network", mas questiono se essa é a melhor abordagem para isso. A chave aqui é permitir que usuários específicos adicionem / editem os sites em sua própria sub-rede.

2) Esta é a questão principal deste post ... Gostaria de saber a melhor abordagem que me permita, essencialmente, consultar posts de dentro dessa "sub-rede" de sites. Assim, por exemplo, se houver 10 sites nessa sub-rede e cada um deles criar postagens em um tipo de postagem personalizado chamado "notícias", eu gostaria de exibir, por exemplo, as 10 postagens publicadas mais recentemente dessa coleção de 10 sites.

NOTA: Eu preciso ser capaz de criar sub-redes multiplicadas, o que, por sua vez, significa que uma consulta das últimas "notícias" publicadas só pode exibir postagens daqueles pertencentes ao grupo correto.

Finalmente - percebo que existem soluções para fazer coisas como essa, mas estou procurando a melhor abordagem em ambos os casos, que exigem a menor quantidade de carga / consultas do banco de dados. Eu também gostaria muito de fazer isso através do código no meu arquivo functions.php, em vez de instalar plug-ins que criam inchaço extra.

Estou muito aberto a sugestões e agradeço qualquer resposta.

NetConstructor.com
fonte

Respostas:

7

Sei que você disse que prefere não instalar um plug-in, mas é exatamente isso que você deseja fazer nessa situação. A colocação do código no functions.phparquivo do seu tema exige que você use o mesmo tema em todos os sites da sub-rede ou mantenha várias cópias do mesmo arquivo. Por outro lado, você pode criar um plug-in simples para a rede encapsular a funcionalidade, ativá-lo na rede e ter imediatamente a funcionalidade disponível com apenas um arquivo para manter. Na verdade, isso criaria menos inchaço do que dependendo de seus functions.phparquivos.

O ponto a ser lembrado aqui é que você precisará percorrer cada site da rede para encontrar suas postagens ou executar uma consulta personalizada. Eu optaria pela segunda rotina porque, embora seja um pouco mais complicada, é uma consulta única e não uma consulta diferente para cada blog.

Basicamente ... você precisará fazer o seguinte:

  1. Obtenha uma lista de todos os IDs de blog na rede / sub-rede. Se estiver usando uma instalação de baunilha, isso pode ser encontrado na wp_blogstabela. Basta fazer uma SELECTconsulta simples para carregar uma matriz e, em seguida, você pode fazer um loop para adicionar cada blog à sua consulta principal.
  2. Crie um loop que adicione cada blog a uma consulta grande. Você precisará JOINreunir tabelas e pesquisar com base em blog_id(de wp_blogs), post_id(de wp_BLOG_posts) e na taxonomia personalizada.

Como eu disse, não é uma solução simples (a instrução SQL será muito complicada e não tenho tempo para resolvê-la no momento), mas será uma única instrução que faz todo o trabalho.

Alternativamente ...

  1. Obtenha uma lista dos IDs do blog e armazene-os em uma matriz.
  2. Faça uma iteração na sua matriz, consultando cada blog na rede e anexando suas correspondências (postagens com um determinado termo de taxonomia) a uma matriz separada.

Com o método alternativo, você terá que executar uma consulta separada para todos os blogs da rede. Se sua rede é de 10 a 20 sites, isso não é um problema. Se sua rede é de 200 a 500, os sites esperam que alguns problemas de desempenho comecem a surgir.

Além disso, você deve armazenar em cache os resultados da sua consulta, se possível. Se estiver sendo executado em várias cargas de página (ou seja, para um widget da barra lateral compartilhado na rede), você só deseja executar a consulta quando houver novos dados a serem obtidos. Caso contrário, exiba os resultados em cache para não diminuir a velocidade da rede.

EAMann
fonte
obrigado pela sua resposta. Eu gosto da sua ideia de fazê-lo através de uma consulta sql personalizada, pois estou assumindo que isso criaria menos carga. O que eu espero é que você possa me mostrar quais plug-ins você usaria para criar essas sub-redes que podem ter sites associados a eles e, quando tiver tempo, a consulta sql que alguém precisaria usar para consultar automaticamente todas as postagens dentro sites atribuídos à sub-rede. Aprecio muito o seu tempo
NetConstructor.com
3
Se possível, atualize
NetConstructor.com
1

Eu tive um problema parecido. Eu precisava obter uma lista de postagens em todos os sites da rede classificadas por comentários (para mostrar as postagens mais populares). Esta é a função que eu usei.

A base é que primeiro ele obtém uma lista de todos os IDs de blog na sua rede. Em seguida, cria uma grande consulta única (usando UNION para combinar todas as linhas e sem exigir JOINs feias) que obtém um resultado contendo as colunas blog_id, ID e comment_count. Usando isso, então uso get_blog_post () para obter informações detalhadas de cada uma das postagens.

Existem algumas linhas de depuração que você pode usar em diferentes pontos para ver o que está acontecendo.

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;

}


fonte
-1

Você definitivamente precisa de plugins de rede multisite. Existem três opções para escolher atualmente: duas pagas, uma gratuita.

A partir daí, você pode usar algo como o plug-in de tags em todo o site para postar no blog principal de cada rede.

Nenhum destes poderia ser (ou deveria ser) feito a partir do arquivo de funções de um tema.

andrea_r
fonte
Quais são os pagos a que você está se referindo?
NetConstructor.com
11
e pago: (meu) wpebooks.com/networks
andrea_r 27/10/10
-3

crie um mecanismo de pesquisa personalizado do google google.com/cse especifique todos os sites que você deseja pesquisar

incorpore-o ao seu site

Mireille Raad
fonte
@mirelle - mas isso não é desafiadoramente a resposta que eu estava procurando
NetConstructor.com