web-dev-qa-db-fra.com

Script d'initialisation pour les aspects "standard" d'un site Web WordPress?

Je suis sur le point d’écrire un script permettant de procéder à une nouvelle installation de WordPress 3.0.1 et d’ajouter toutes les fonctionnalités initiales d’un site Web}. Ceci est destiné aux entreprises qui installent de nombreux sites Web similaires et qui ont besoin d’un point de départ standard pour la configuration et les données.

  • _ {Je me demande si quelqu'un d'autre l'a déjà fait et s'il peut partager son code?} _

J'imagine que nous allons modifier ce script à chaque fois ils créent un nouveau site, donc le codage en dur va bien bien que finalement (après suffisamment d'expérience), j'aimerais convertir en plugin.

Voici la liste de base des tâches} _ _ Je pense que nous aurons besoin de (ils supposent que j'ai déjà démarré avec WordPress 3.0.1 déjà installé et que mes plugins personnalisés et mon thème personnalisé ont été copiés dans les répertoires appropriés):

// Create users for the current site
// Delete Hello Dolly Plugin
// Download, Install and Activate repository plugins
// Activate Custom Plugins (assume the plugins are already there)
// Activate Custom Theme
// Delete Hello Post
// Delete Comment on Hello Post
// Create Pages with Starter Content
// Create Initial Custom Post Types with Starter Content
// Create Multiple Menus 
// Create Menu Items for those Menus linking to Pages and wp-login.php
// Create Initial Taxonomy Terms
// Set Desired Permalinks Setting
// Set Static Front Page Setting

C'est à peu près tout (même si je peux en identifier plus au fur et à mesure que je m'y mêle).

Encore une fois, je cherche du code que je peux simplement copier et modifier donc je n'ai pas à comprendre moi-même tous ces détails (ce qui n'est pas difficile, mais fastidieux et fastidieux consommer).

Oh, encore une chose, je dois commencer par ceci maintenant donc le plus tôt sera le mieux! :-)

23
MikeSchinkel

Comme je l'ai mentionné j'allais commencer à travailler sur ce besoin immédiatement, donc je fais des progrès. Étant donné que je les écrase, je me suis dit que le mieux était de commencer à les poster. Néanmoins, si quelqu'un d'autre peut/va poster (certaines des) parties que je n'ai pas faites, je me ferai un plaisir de vous laisser copier ce que je vous avais déjà fait et de choisir votre réponse comme meilleure réponse. Jusque-là, je vais commencer à poster le code.

Première chose: Inclure wp-load.php:

Puisque nous créons un fichier autonome à la racine du site Web pour exécuter une initialisation qui sera uniquement utilisée pour "amorcer" un site (j'ai appelé le mien /my-init.php), nous commençons par inclure /wp-load.php pour charger l'API WordPress. les fonctions:

<?php
include "wp-load.php";

Création d'utilisateurs pour le site

Nous allons utiliser la fonction wp_insert_user() 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 allons également utiliser la fonction get_user_by() pour voir d’abord si l’utilisateur a déjà été créé; pas besoin d'exécuter le code deux fois s'ils ne l'ont pas fait. NOTE: _ ​​Ceci est un modèle qui suivra; par exemple, notre script ne doit pas dupliquer ou écraser quoi que ce soit s'il est appelé plusieurs fois, surtout après que les utilisateurs ont ajouté ou modifié des données pour l'un des éléments que nous avons ajoutés. prévoyez 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'        => '[email protected]',
    '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 "Hello Dolly" plugin ( désolé Matt ), nous allons utiliser la fonction delete_plugins(). delete_plugins() attend un tableau de chemins de fichiers relatifs au répertoire /wp-content/includes/. Pour le plugin Hello Dolly _, le chemin du fichier est simplement hello.php puisque le plugin Hello Dolly n'est pas stocké dans son propre répertoire, mais pour la plupart des plugins, il se présentera sous la forme de {$subdir}\{$filename}.php; c'est-à-dire que le chemin d'accès au fichier pour Akismet est akismet/akismet.php.

Cependant, delete_plugins() n'est pas disponible tant que nous n'avons pas inclus /wp-admin/includes/plugin.php et il existe également une dépendance avec wp-admin/includes/file.php, de sorte que nous require_once() les deux avant d'appeler delete_plugins(). Enfin, nous utilisons WP_PLUGIN_DIR constante associé à file_exists() pour voir si le fichier de plugin principal existe avant de tenter de le supprimer (ce n’est pas le cas qui importe) si nous essayons de supprimer un fichier manquant, mais il est plus élégant de le vérifier en premier et vous pourrait avoir besoin de 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'));

Note que parfois delete_plugins() échouera à cause d'autorisations de fichiers ou peut-être du fait qu'un plugin est actuellement activé ou pour toute autre raison que vous devrez d'abord résoudre, mais pour notre cas d'utilisation Hello Dolly s'en va sans se battre.

Télécharger, installer et activer des plugins de référentiel

Je n'ai pas réellement besoin de télécharger les plugins depuis le référentiel pour le moment (je pensais que ce serait simplement un plaisir de l'avoir)} _ nous allons laisser cette exigence glisser et la revoir 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 que nous avons tous besoin de le faire activer pour WordPress. (Note: cette technique fonctionnera aussi pour activer les plugins du référentiel, elle ne les téléchargera et ne les installera pas d'abord.)}

Nous utiliserons la fonction activate_plugin() qui, comme delete_plugins(), nécessite l'inclusion de /wp-admin/includes/plugin.php, mais ne l'est pas need /wp-admin/includes/file.php au cas où vous auriez simplement besoin d'automatiser l'activation et non la suppression.

Nous testerons à nouveau l'existence (pas besoin d'activer sinon, hein?)} Et nous vérifierons également à l'aide de la fonction is_plugin_active() que le plugin n'a pas déjà été activé. Remarque J'ai utilisé quelques variables cette fois ($plugin_filepath et $plugin_dir) pour éviter de dupliquer l'identifiant du plug-in à plusieurs reprises.

Notre exemple suivant active le plugin my-custom-plugin.php qui se trouve dans le sous-répertoire my-custom-plugin:

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);

Activer votre thème préféré

Activer un thème est un peu plus facile que de supprimer ou d’activer un plugin, comparativement; Un seul appel de fonction suffit: switch_theme(). La fonction switch_theme() accepte deux paramètres (2)}: le modèle et le feuille de style. Au moins, c’est ainsi que les paramètres sont nommés. Vous connaissez peut-être mieux les termes thème parent et thème enfant .

En supposant que vous ayez créé un thème enfant avec le thème TwentyTen par défaut fourni avec WordPress étant le thème parent et que vous l'avez appelé "Mon thème personnalisé" et placé dans le répertoire /wp-content/themes/my-custom-theme, vous activeriez votre thème en utilisant cet appel:

switch_theme('twentyten', 'my-custom-theme');

Mais que se passe-t-il si ce n'est pas un thème d'enfant? C’est simple, il suffit de passer le répertoire slug/theme identifier _ ​​(c’est-à-dire le nom du sous-répertoire de /wp-content/themes contenant votre thème)} comme paramètres En supposant que vous souhaitiez activer le thème thématique de Ian D Stewart vous avez appelé switch_theme() comme suit:

switch_theme('thematic', 'thematic');

Personnellement, je pense que c'est un peu maladroit de devoir garder une trace de ces deux détails ici, alors j'ai écrit une fonction appelée activate_my_theme() qui vérifie d'abord si la fonction get_current_theme() est activée et si ce n'est pas activé. Vous devez juste lui dire le thème enfant ("la feuille de style")} et il détermine le thème parent pour vous (le "modèle")} en récupérant 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é à prendre en compte de; la fonction get_theme() s'attend à recevoir le nom du thème enfant, PAS c'est l'identificateur de répertoire/identificateur de thème. (Le nom provient de la section "Nom du thème:" de l'en-tête du fichier style.css du thème. Heureusement, la fonction get_current_theme() renvoie également le nom.)

En inspectant l’en-tête dans le fichier style.css du thème par défaut de WordPress Twenty Ten _ nous voyons 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 "Hello World" Post

Ensuite, nous voulons supprimer le message "Hello World". Vous avez peut-être vu que @Rarst nous a montré comment utiliser la fonction wp_delete_post() qui correspond exactement à ce dont nous avons besoin. Comme il l'a expliqué, le second paramètre supprimera complètement la publication plutôt que de la déplacer dans la corbeille et le premier paramètre est le $post->ID.

Bien sûr, il serait bien de pouvoir spécifier le slug au lieu du $post->ID et j'ai donc décidé de trouver un moyen de le faire. Après quelques spéléologues, j’ai trouvé que WordPress avait une fonction malheureusement nommée get_page_by_path() qui nous permet en fait de rechercher tout type de message par son slug (il est malheureusement nommé ainsi car vous pourriez l’ignorer lorsqu autre que 'page'.)}

Puisque nous passons get_page_by_path() la constante OBJECT définie par WordPress, elle nous retournera une publication sous la forme d'un objet de publication. Pour le troisième paramètre, nous avons passé 'post' pour indiquer que nous voulions rechercher les types de publication de 'post'. Puisque get_page_by_path() retournera l'objet de publication dont nous avons besoin ou null si aucune publication ne correspond à la balise, nous pouvons vérifier l'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);

Note: Nous aurions pu exécuter le code pour supprimer toutes les publications de la base de données, mais nous ne pourrions plus l'exécuter une fois que nous aurions ajouté les publications que nous souhaitons conserver. nos contraintes de conception.

Suivant...

Je continuerai à ajouter à cela au fur et à mesure que je le découvrirai jusqu'à ce que j'ai terminé ou que quelqu'un d'autre vienne l'aider.

20
MikeSchinkel

Définir les liens permanents souhaités

Un nouveau projet thématique (génial) que j'ai rencontré cette semaine et qui est fortement axé sur les fonctionnalités HTML5/CSS3 a son propre script de 'démarrage' pour créer du contenu standard, incorporer des paramètres permalink, définir une racine relative pour l'installation du site, etc. les fonctionnalités sont appelées lors de l'activation du thème. Le projet s'appelle Roots et le code peut être téléchargé ici ; Je ne prends aucun crédit pour ce code. Ceci dit, voici le code à définir automatiquement/year/postname en tant que structure permalien (et les crochets d'activation ci-dessous pour le global $ pagenow sont expliqués ici: http://foolswisdom.com/wp-activate-theme-actio / .).

<?php

    global $pagenow;
    if (is_admin() && 'themes.php' === $pagenow && isset( $_GET['activated'])) {


        // set the permalink structure
        if (get_option('permalink_structure') != '/%year%/%postname%/') { 
            update_option('permalink_structure', '/%year%/%postname%/');
      }

        $wp_rewrite->init();
        $wp_rewrite->flush_rules(); 


    }

?>

4
user4443

Supprimer Hello Post (avec un commentaire)

wp_delete_post( 1, true );

Directement à partir de wp_delete_post() docs. Le second paramètre neutralise complètement le problème, au lieu de passer à la corbeille.

Créer des menus

Cela crée un nouveau menu et ajoute toutes les pages existantes en tant qu’éléments. Je ne suis pas sûr que ce soit tout à fait correct. Je ne pouvais pas obtenir d'éléments de menu pour afficher l'étiquette Page, entre autres. Quoi qu'il en soit, mon cerveau est en train de fondre et je prends une pause. Peut-être que quelqu'un sera capable de passer à quelque chose de plus fiable.

$menu = wp_create_nav_menu( 'Pages' );
$menu = wp_get_nav_menu_object( 'Pages' );
$pages = get_pages();

foreach( $pages as $page ) {

$item = array(
'menu-item-db-id' => 0,
'menu-item-object-id' => $page->ID,
'menu-item-type' => 'post_type',
'menu-item-status' => 'publish'
);

wp_update_nav_menu_item( $menu->term_id, 0, $item );
}
3
Rarst

Regardez ce script d'installation. https://github.com/Pravdomil/WP-Quick-Install

Je prends vos idées et du code pour créer quelque chose que vous recherchez probablement.

Les fonctions sont la base de données de configuration, différentes langues, créer des utilisateurs, définir les paramètres de base du site, supprimer les plugins et modèles par défaut, télécharger et activer les plugins et les thèmes, avatar par défaut, permaliens, page de garde statique.

N'hésitez pas à contribuer.

0
pravdomil

Si je le comprends bien, vous le voulez pour une instalation initiale - alors je crains que votre approche soit totalement fausse.

Une méthode beaucoup mieux, plus simple et standardisée est de créer install.php et de le placer dans le dossier wp-content - il est automatiquement chargé lors de l’installation.

Vous pouvez y mettre votre propre fonction wp_install (comme la fonction propre de wordpress utilise if (! Function_exist)) pour pouvoir facilement configurer vos options, activer des plugins, remplir les posts, catégories, tags, utilisateurs ...

La deuxième option peut être pour la situation où vous voulez effacer le fichier wp déjà existant (par exemple pour la version de démonstration configurée toutes les 30 minutes à l’aide de cron) - vous pouvez même.

0
user3261