web-dev-qa-db-fra.com

Tirez les messages d'une autre installation wordpress sur le même serveur

J'ai déjà fait une recherche et je n'ai rien trouvé qui corresponde à mon problème spécifique, des excuses si cela a déjà été demandé.

J'ai une installation publique Wordpress et un membre seulement sur un sous-domaine. La raison en est qu’il s’agit de sites très différents sur le plan des fonctionnalités. Il n’est donc pas possible de créer des publications réservées aux membres dans le site principal. De nouveaux contenus premium seront ajoutés au sous-domaine, mais je dois également récupérer les publications du site public.

J'ai examiné les URL de flux, mais comme j'ai mis en place une personnalisation assez spécifique de la recherche dans le sous-domaine, il est nécessaire que ces articles soient interrogeables. Par exemple, j'ai un post supplémentaire plugin 'post countries' montrant un pays associé à la publication. Est-ce toujours quelque chose que l'URL du flux pourrait gérer, ou y a-t-il d'autres alternatives?

Merci

EDIT Voici comment ma recherche privée actuelle est configurée, je viens de la coller dans le code approprié.

$args = array(
'post_type' => 'post', 
'show_posts' => '10', 
'paged' => $paged
);

$the_query = new WP_Query($args); 

<?php if ($the_query->have_posts()) : while ($the_query->have_posts()) : $the_query->the_post(); ?>
    // The output

Dans mes propres sites, les résultats de la base de données privée sont stockés dans $the_query et ceux du site public dans $allsearch, ce qui voudrait dire que je devrais ajouter ce qui suit et rendre ma boucle Vanille.

$the_query->posts=array_merge($the_query->posts,$allsearch);
$the_query->post_count=count($the_query->posts);

Est-ce que cela sonne juste, cela ne tire-t-il aucun message d'un site public?

2
zilj

si c'est la même base de données, vous pouvez facilement écrire la requête en utilisant la variable globale $ wpdb. S'il s'agit d'une base de données séparée, créez une autre instance de la classe wordpress wpdb et écrivez-lui les requêtes. $wpdb2 = new wpdb( $user, $pass, $db, $Host );

Dans tous les cas, vous devez connaître le préfixe des tables de la base de données.

METTRE À JOUR

Vous pouvez le faire de toute façon, soit en obligeant le site public à insérer les données dans les deux bases de données, soit en laissant le sous-domaine sélectionner les données à la fois de sa propre base de données et de sa base de données publique. Disons que vous voulez la 2ème approche

Dans ce cas, vous ne voulez pas que le serveur public fasse quoi que ce soit, alors mettons cela de côté. Maintenant, dans le fichier modèle du sous-domaine, vous aurez déjà du code. Là, vous allez créer une nouvelle instance de la classe wpdb en utilisant le code ci-dessus avec les détails de la base de données du serveur public. Vous allez ensuite écrire une requête dans la base de données publique à l'aide de cet objet. Consultez le codex pour savoir comment le faire.

Si vous voulez adopter la première approche, vous le ferez également, sauf que le code est ajouté au code de la page publique.

Aussi, vous pouvez faire quelque chose comme ça pour utiliser les fonctions wordpress

global $wpdb;
$temp = $wpdb;
$wpdb = new wpdb( $user, $pass, $db, $Host );
// make the query here
$wpdb = $temp;

Bien que cela échoue dans certaines fonctions wordpress, je vous recommande de vous en tenir à la requête directe

2
Mridul Aggarwal