web-dev-qa-db-fra.com

Question WP données avec l'API WPDB en dehors de WordPress

Je travaille sur un projet avec WP, un peu comme un plugin, mais pas tout à fait.

Je rencontre un problème lorsque j'essaie d'inclure un fichier contenant des fonctions SQL personnalisées dans une classe. Dans un fichier complètement différent, je suis redirigé vers http://example.com/folder1/file.php/wp-admin/install.php.

Ce qui indique que j'ai déjà installé WP et que je dois le désinstaller avant de pouvoir l'installer à nouveau .. Mais je n'essaie pas d'installer/réinstaller WP.

^ Cela semble un peu compliqué, laissez-moi vous donner un exemple:

J'ai file1.php et file2.php. file1.php contient de nombreuses fonctions SQL que j'ai écrites pour accéder à la base de données utilisée par WP.

Et file2.php contient une classe qui inclut file1.php, ainsi je peux utiliser certaines des fonctions SQL de la classe.

Maintenant, je l'ai d'abord testé en appelant des fonctions SQL (from file1.php) dans la classe et je suis tombé sur ce problème. Après un certain débogage (suppression des lignes une à une), le problème était la ligne qui contenait file1.php (le fichier avec toutes les fonctions SQL qu’il contient).

Donc, pour une raison quelconque, chaque fois que j'inclus file1.php dans file2.php je suis redirigé vers: http://example.com/folder1/file2.php/wp-admin/install.php

Des idées pourquoi ceci se produit et comment je peux le résoudre?

J'ai oublié de mentionner quelque chose:

file1.php (avec toutes les fonctions SQL) inclut wp-config.php pour obtenir les informations sur la base de données, ce qui pourrait être lié à ce problème, n'est-ce pas?

2
user11388

L'essentiel

Si vous ne chargez que les parties de WP qui accèdent à la base de données, il existe une constante pour vous:

define( 'SHORTINIT', true )

Combinez simplement cela avec une variable de requête personnalisée pour pouvoir l'activer/la désactiver à partir de votre fichier wp-config.php:

if ( 
    isset( $_GET['shortinit'] )
    AND 'true' === $_GET['shortinit']
)
    define( 'SHORTINIT', true )

Cela vous permet d’ajouter ?shortinit=true à votre URl pour exécuter WP sans tout ce qui brille et scintille. Si vous avez besoin d'autres fonctions de l'API, développez simplement ce wrapper dans votre fichier de configuration et incluez également les fichiers responsables.

Mais vous devrez définir vous-même les globales $wp, $wp_query, $wp_the_query. Ce n'est pas si difficile si vous jetez un oeil à où et comment le noyau fait cela.

Routage

J'ai également écrit sur la façon dont vous pouvez ajouter des règles non WP rewrite dans cette réponse .

1
kaiser

J'ai oublié de mentionner quelque chose:

file1.php (avec toutes les fonctions SQL) inclut wp-config.php pour obtenir les informations sur la base de données, ce qui pourrait être lié à ce problème, n'est-ce pas?

Des dollars en beignets, c'est votre problème. Vous ne devriez jamais, jamais avoir besoin de charger wp-config.php directement.

Essayez-vous d’accéder aux fonctions WordPress depuis en dehors de WordPress?

Modifier

Pour accéder aux fonctions WordPress depuis en dehors de l’environnement normal de WordPress, vous souhaitez inclure wp-load.php, pas wp-config.php.

Exemple de base:

<?php
require( 'path/to-wordpress/wp-load.php' );
?>

Modifier 2

Je n'ai pas [besoin d'accéder aux fonctions WordPress]. Juste les informations de la base de données (hôte, utilisateur, mot de passe). L'application sur laquelle je travaille installe des tables supplémentaires dans la base de données WP. L'application n'aura pas besoin de toucher les données de WP. Le service informatique utilise simplement les informations de base de données pour accéder à ses propres données, dans ses propres tables, en utilisant simplement la même base de données que celle utilisée par WP. Je préférerais créer ma propre base de données dans MySQL, mais la plupart des utilisateurs n’ont pas l’autorisation de le faire. Je dois donc utiliser la base de données de WP, mais mes propres tables. Bien que l'application nécessite que WP soit installé, je n'ai pas besoin d'accéder à aucune des fonctions ATM de WP.

Dans ce cas, vous n'avez pas besoin de charger WordPress . Vous accédez simplement à la base de données. Oubliez simplement la ligne.

1
Chip Bennett