Comme je l'ai mentionné, j'allais commencer à travailler sur ce besoin immédiatement alors je fais des progrès. Étant donné que je les supprime, je me suis dit qu'il valait mieux commencer à les publier. Pourtant, si quelqu'un d'autre peut / publiera (certaines) des parties que je n'ai pas faites, je serai heureux de vous laisser copier ce que je n'ai pas fait et de sélectionner votre réponse comme la meilleure réponse. D'ici là, je vais commencer à publier le code.
Première chose: inclure wp-load.php
:
Comme nous créons un fichier autonome à la racine du site Web pour exécuter l'initialisation qui ne sera utilisé que pour "bootstrap" un site (j'ai appelé le mien /my-init.php
), nous commençons par inclure/wp-load.php
le chargement des fonctions de l'API WordPress:
<?php
include "wp-load.php";
Création d'utilisateurs pour le site
Nous utiliserons la wp_insert_user()
fonction située dans /wp-includes/registration.php
pour créer nos utilisateurs. Ce fichier n'est pas chargé par défaut, nous devrons donc le charger nous-mêmes avec un appel à require_once()
.
Nous utiliserons également la get_user_by()
fonction pour voir d'abord si l'utilisateur a déjà été créé; pas besoin d'exécuter le code deux fois si ce n'est pas le cas. REMARQUE: il s'agit d'un modèle qui suivra; Par exemple, notre script ne doit pas dupliquer ou remplacer quoi que ce soit s'il est appelé plusieurs fois, en particulier après que les utilisateurs ont ajouté ou modifié des données pour l'un des éléments que nous prévoyons d'initialiser.
require_once( ABSPATH . WPINC . '/registration.php');
$user = get_user_by('slug','johnsmith');
if (!is_object($user)) {
wp_insert_user(array(
'user_login' => 'johnsmith',
'role' => 'administrator',
'user_email' => 'johnsmith@example.com',
'user_url' => 'http://example.com',
'first_name' => 'John',
'last_name' => 'Smith',
'comment_shortcuts' => '',
'use_ssl' => '0',
'user_pass' => '12345',
));
}
Suppression du plugin "Hello Dolly"
Pour supprimer le plugin "Hello Dolly" ( désolé Matt ), nous utiliserons la delete_plugins()
fonction. delete_plugins()
attend un tableau de chemins de fichiers relatifs au /wp-content/includes/
répertoire. Pour le plugin Hello Dolly, le chemin du fichier est simplement hello.php
car le plugin Hello Dolly n'est pas stocké dans son propre répertoire, mais pour la plupart des plugins, il sera sous la forme de {$subdir}\{$filename}.php
; c'est-à-dire que le chemin du fichier pour Akismet est akismet/akismet.php
.
Cependant, delete_plugins()
n'est pas disponible jusqu'à ce que nous ayons inclus /wp-admin/includes/plugin.php
et il y a aussi une dépendance avec wp-admin/includes/file.php
nous require_once()
deux donc avant d'appeler delete_plugins()
. Enfin, nous utilisons une WP_PLUGIN_DIR
constante combinée avec file_exists()
pour voir si le fichier du plugin principal existe avant d'essayer de le supprimer (ce n'est pas grave si nous essayions de supprimer un fichier manquant, mais il est plus élégant de vérifier d'abord et vous devrez peut-être savoir comment pour une autre raison) :
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
if (file_exists(WP_PLUGIN_DIR . '/hello.php'))
delete_plugins(array('hello.php'));
Notez que parfois delete_plugins()
échouera en raison des autorisations de fichier ou peut-être du fait qu'un plugin est actuellement activé ou d'une autre raison que vous devrez d'abord résoudre mais pour notre cas d'utilisation Hello Dolly s'en va sans combat.
Téléchargement, installation et activation des plugins de référentiel
Je n'ai pas vraiment besoin de télécharger les plugins à partir du référentiel pour le moment (je pensais que ce serait bien d'avoir), nous allons laisser cette exigence glisser et la revisiter plus tard.
Activer vos plugins
La prochaine étape consiste à activer nos propres plugins personnalisés. Nous supposons que nous les avons déjà téléchargés dans le répertoire du plugin et tout ce dont nous avons besoin pour les activer pour WordPress. ( Remarque : Cette technique fonctionnera également pour l'activation des plugins de référentiel, elle ne sera tout simplement pas téléchargée et installée en premier.)
Nous utiliserons la activate_plugin()
fonction qui, comme elle, delete_plugins()
doit /wp-admin/includes/plugin.php
être incluse mais n'est pas nécessaire /wp-admin/includes/file.php
au cas où vous auriez seulement besoin d'automatiser l'activation et non la suppression.
Nous allons à nouveau tester l'existence (pas besoin d'activer s'il n'y en a pas, hein?) Et nous vérifierons également en utilisant la is_plugin_active()
fonction que le plugin n'a pas déjà été activé. Notez que j'ai utilisé quelques variables cette fois ( $plugin_filepath
et$plugin_dir
) pour éviter de dupliquer l'identifiant du plugin plusieurs fois.
Notre exemple qui suit active le plugin my-custom-plugin.php
qui se trouve dans le my-custom-plugin
sous - répertoire:
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
$plugin_filepath = 'my-custom-plugin/my-custom-plugin.php';
$plugin_dir = WP_PLUGIN_DIR . "/{$plugin_filepath}";
if (file_exists($plugin_dir) && !is_plugin_active($plugin_filepath))
activate_plugin($plugin_filepath);
Activation de votre thème préféré
L'activation d'un thème est un peu plus facile que la suppression ou l'activation d'un plugin, relativement parlant; un appel de fonction est tout ce qui est nécessaire: switch_theme()
. La switch_theme()
fonction accepte deux (2) paramètres: le modèle et la feuille de style . Eh bien, c'est du moins le nom des paramètres. Vous connaissez peut-être mieux les termes Thème parent et Thème enfant .
En supposant que vous avez créé un thème enfant avec le thème TwentyTen par défaut fourni avec WordPress comme thème parent et que vous l'avez appelé "Mon thème personnalisé" et que /wp-content/themes/my-custom-theme
vous l'avez placé dans le répertoire, vous activez votre thème à l'aide de cet appel:
switch_theme('twentyten', 'my-custom-theme');
Mais que faire si ce n'est pas un thème enfant? C'est facile, il suffit de passer l' identifiant slug / theme du répertoire (c'est-à-dire le nom du sous-répertoire /wp-content/themes
qui contient votre thème) comme deux paramètres. En supposant que vous souhaitiez activer le thème thématique d' Ian D Stewart, vous appelez switch_theme()
ainsi:
switch_theme('thematic', 'thematic');
Personnellement, je pense que c'est un peu délirant d'avoir à garder une trace des deux détails ici, j'ai donc écrit une fonction appelée activate_my_theme()
qui vérifie d'abord la get_current_theme()
fonction et sinon l'activer. Vous avez juste besoin de lui dire le thème enfant (alias la "feuille de style") et il comprend le thème parent pour vous (alias le "modèle") en saisissant les détails de la get_theme()
fonction.
activate_my_theme('My Current Theme');
function activate_my_theme($theme_name) {
if ($theme_name!=get_current_theme()) {
$theme = get_theme($theme_name);
switch_theme(
$theme['Template'],
$theme['Stylesheet']
);
}
}
Un point clé à connaître ; la get_theme()
fonction s'attend à recevoir le nom du thème enfant, PAS son identificateur de slug / theme de répertoire. (Le nom provient de la section "Nom du thème:" dans l'en-tête du style.css
fichier du thème . Heureusement, la get_current_theme()
fonction renvoie également le nom.)
En inspectant l'en-tête dans le style.css
fichier du thème par défaut WordPress Twenty Ten on voit que son nom est en fait 'Twenty Ten'
:
/*
Theme Name: Twenty Ten
Theme URI: http://wordpress.org/
Description: The 2010 theme for WordPress is stylish, customizable, simple, and readable -- make it yours with a custom menu, header image, and background. Twenty Ten supports six widgetized areas (two in the sidebar, four in the footer) and featured images (thumbnails for gallery posts and custom header images for posts and pages). It includes stylesheets for print and the admin Visual Editor, special styles for posts in the "Asides" and "Gallery" categories, and has an optional one-column page template that removes the sidebar.
Author: the WordPress team
Version: 1.1
Tags: black, blue, white, two-columns, fixed-width, custom-header, custom-background, threaded-comments, sticky-post, translation-ready, microformats, rtl-language-support, editor-style
*/
Suppression du message "Hello World"
Ensuite, nous voulons supprimer le message "Hello World" . Vous avez peut-être vu que @Rarst nous a montré comment utiliser la wp_delete_post()
fonction qui est exactement ce dont nous avons besoin. Comme il l'a expliqué, le deuxième paramètre supprimera complètement le message au lieu de le déplacer dans la corbeille et le premier paramètre est le$post->ID
.
Bien sûr, ce serait bien de pouvoir spécifier le slug au lieu du $post->ID
et je décide donc de trouver un moyen de le faire. Après quelques spéléologies, j'ai trouvé que WordPress avait une fonction malheureusement nommée get_page_by_path()
qui nous permet en fait de rechercher n'importe quel type de publication par son slug (elle est malheureusement nommée parce que vous pourriez l'ignorer lorsque vous essayez de trouver quelque chose qui fonctionne avec des types de publication autres que 'page'
.)
Puisque nous passons get_page_by_path()
la constante définie par WordPress, OBJECT
elle nous renverra un message sous la forme d'un objet de publication. Pour le troisième paramètre que nous avons passé 'post'
pour indiquer que nous voulions qu'il recherche les types de publication de 'post'
. Puisque get_page_by_path()
retournera l'objet post dont nous avons besoin ou retournera null
si aucun post ne correspond au slug, nous pouvons vérifier son existence et faire une recherche en même temps:
$post = get_page_by_path('hello-world',OBJECT,'post');
if ($post)
wp_delete_post($post->ID,true);
Remarque: Nous aurions pu exécuter du code pour supprimer tous les messages de la base de données, mais si nous l'avions, nous ne pourrions plus exécuter ce code une fois que nous aurions ajouté les messages que nous voulons conserver et c'était l'une de nos contraintes de conception.
Prochain...
Je continuerai d'ajouter à cela pendant que je le découvrirai jusqu'à ce que j'aie terminé ou jusqu'à ce que quelqu'un d'autre aide.
Create Menus for Custom Pages
? Voulez-vous dire des zones de menu individuelles sur certaines pages ou quoi?