Le contexte
Dans le cadre de sites WordPress interagissant avec le monde extérieur, il est parfois souhaitable de récupérer le contexte WordPress pour réaliser un traitement sur une page qui ne fait pas partie du CMS. Un exemple : réaliser un export CSV des utilisateurs, accessible dans le back-office. Comment faire ?
Imaginons que vous souhaitez offrir à vos administrateurs une option d’export des utilisateurs enregistrés. Vous définissez dans votre function.php le menu correspondant (dans le menu utilisateur : consultez le codex pour plus d’informations sur add_submenu_page) :
// Add administration items in the admin panel
function wp_counter_pages() {
add_submenu_page( 'users.php', 'Export utilisateurs', 'Export','administrator','export_admin','export_admin');
}
add_action( 'admin_menu', 'wp_counter_pages' );
Vous voyez où je veux en venir : la fonction export_admin (5ème paramètre de add_submenu_page) va permettre d’afficher le formulaire d’action dans le back-office. Avec ce formulaire, nous allons faire appel (via la méthode POST) à un fichier externe qui réalisera l’export pour nous :
<div class="wrap"> <h2>Export des utilisateurs</h2> Une option d'export vous est offerte ici : <div style="margin: 0 auto;">
<form style="float: left; margin: 10px;" action="../wp-content/themes/your-theme/functions/export.php" method="post">
<input class="button" style="width: 200px;" type="submit" value="Export complet" />
</form>
</div> </div>
Comment intégrer le contexte WordPress?
Ce fichier qui va réaliser l’export (export.php, qui est la valeur de l’attribut « action » du formulaire) est totalement hors du contexte WordPress. Impossible donc d’accéder aux classes et objets WordPress qui nous permettraient d’aller interroger la base. Pour pallier à cela, et notammet accéder à la base, il vous faut inclure :
- Le fichier wp-config.php
- Le fichier wp-load.php
- Le fichier wp-db.php
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=\"Utilisateurs_non_finalises.csv\"");
require_once('global_functions.php');
/** Load WordPress Bootstrap in order to use classes*/
include_once('../../../../wp-config.php');
include_once('../../../../wp-load.php');
include_once('../../../../wp-includes/wp-db.php');
Vous voilà à-même d’exécuter n’importe quel code faisant appel à WordPress dans un fichier externe au CMS ! N’hésitez pas à réagir ci-dessous via les commentaires





