Para as instalações do WordPress que usam multisites, sempre há aquelas “complicações” de se localizar um determinado conteúdo em um determinado site e em uma determinada rede. Criar classes separadas e criar querys elaboradas, parece ser tarefa cansativa. Isso ainda preocupado com a performance e segurança. Um exemplo dessa consulta básica, é vista nesse SQL:
"SELECT * FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' ".
Mediante há algumas solicitações na comunidade, foram criadas duas classes que resolvem justamente essas questões, são elas a WP_Site_Query e WP_Network_Query.
Multisites o WP_Site_Query e o WP_Network_Query
São utilidades voltadas para instalações multisites que está disponível a partir da versão 4.6 do WordPress, que visa uma buscas flexíveis de sites na rede, por meios dos metódos WP_Site_Query ou get_sites( ) e WP_Network_Query ou get_networks ( ). É possível realizar consultas usando a tabela $wpdb->blogs
ou $wpdb->sites
por meio de ID, domínio caminho e muito mais. Pode-se ainda associar a filtros e ações, como por exemplo:
WP_Site_Query | WP_Network_Query | |
Actions: | parse_site_query e pre_get_sites |
parse_network_query e pre_get_networks |
Filters: | the_sites, site_search_columns, sites_clauses e found_sites_query |
the_networks, networks_clauses e found_networks_query |
As consultas na versão 4.6 do WordPress se resumem ao uso das classes WP_Site_Query e WP_Network_Query que retorna em uma matriz (array) com a lista de sites correspondentes aos critérios informados para a pesquisa, as entradas da matriz (array) são objetos instanciado pelo WP_Site e WP_Network.
// WP_Site_Query arguments
$args = array (
);
// The Site Query
$site_query = new WP_Site_Query( $args );
// The Network Query
$network_query = new WP_Network_Query( $args );
Conclusão
Essas soluções somam e muito, e acima de tudo mantem garantido a performance e segurança para os usuários. Todas as consultas realizadas ficam armazenados em cache como objeto persistente de um grupo de site no caso do WP_site ou rede para WP_Network, ambas globais.