web-dev-qa-db-fra.com

Création d'un formulaire de publication en dehors de l'administrateur

Je fusionne Wordpress dans un système existant et demande à nos utilisateurs de pouvoir publier des publications sur une installation multi-site WP. J'ai une table de base de données qui va lier notre propre membre à des identifiants de blog et à des éléments spécifiques, il n'y aura donc pas besoin d'utilisateur/de connexion en ce qui concerne WP.

Ce que j'ai vraiment besoin de savoir, c'est comment exécuter certaines fonctions WP en dehors de WP lui-même - sur un domaine complètement différent (avec le même serveur). J'ai simplement essayé d'inclure wp-load.php dans notre panneau d'administration existant, mais dès que je le fais, il redirige vers le site principal - je suppose parce que les domaines ne correspondent pas:

domain1.com et domain2.com sont tous deux sur le même serveur, domain1.com est le programme d'installation de WP MU, sur domain2.com dans notre propre zone d'administration, y compris wp-load.php et dès que Je le fais me redirige directement vers la page d'accueil de domain1.com.

Est-il même préférable de le faire de cette façon? J'ai vu quelques exemples où des personnes ont directement interrogé la base de données WP pour insérer des publications. mais si c'est le cas, je dois me demander pourquoi j'utilise même WP pour ce projet?! Je pense à utiliser WP API XMLRPC, mais j'ai besoin de plus de puissance que cela et je ne souhaite pas me rendre vraiment.

2
Dunhamzzz

Ok, j'ai craqué, en usurpant la variable $ _SERVER et en pré-défendant certaines constantes, j'ai pu empêcher Wordpress de rediriger après l'inclusion de wp-load.php.

define('WP_USE_THEMES', false);
define( 'DOMAIN_CURRENT_SITE', $siteRow['domain'] );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', $siteRow['wp_blog_id'] );

$_SERVER = array(
    "HTTP_Host" => $siteRow['domain'],
    "SERVER_NAME" => $siteRow['domain'],
    "REQUEST_URI" => "/",
    "REQUEST_METHOD" => "GET"
);

require_once WP_PATH.'wp-load.php';
switch_to_blog($siteRow['wp_blog_id']);

$ siteRow contient des détails sur le site cible. Remarque : Cela ne peut pas être à l'intérieur d'une fonction en raison de contraintes variables globales.

3
Dunhamzzz

Bonjour, je suis un hacker, pas un programmeur, et j’ai réussi à le faire fonctionner rapidement, mais j’ai eu de la chance.

J'ai supposé que les commandes "define" correspondaient à ce qui se trouvait dans mon tableau de bord multisite et j'ai ajouté le code $ _server en haut de mon script wp_insert_post et cela a fonctionné. Je n'ai pas utilisé ce qui suit:

define('WP_USE_THEMES', false);

J'ai utilisé ce qui suit pour sélectionner le blog, même si c'était le blog par défaut, cela n'était peut-être pas nécessaire:

global $switched; switch_to_blog(1);

Ou aurais-je dû mettre les déclarations "define" dans le script?

À votre santé

Jack

1
Jack Godot