Je suis nouveau dans le développement Wordpress (et php en général), donc je suis confus quant à l'exécution des fonctions dans le fichier php de mon plugin. J'ai vu plusieurs guides indiquant la création d'une fonction register_activation_hook
, qui est exécutée lorsque le plug-in est activé. Cependant, après la fonction de raccordement d'activation, il existe toujours un appel add_action('init')
qui ajoute de nombreuses options à la base de données.
Ma question est donc la suivante: lorsque Wordpress évalue le fichier php de mon plug-in et trouve l'appel register_activation_hook
, pourquoi n'exécute-t-il pas l'appel add_action('init')
tant que après que le plugin ne soit activé? Si Wordpress évalue le fichier php de mon plugin et qu'il existe un appel de fonction à add_action('init')
dans le fichier, il semble que cet appel de fonction serait exécuté lors de l'évaluation de la page, car il ne fait pas partie d'une structure de contrôle.
Je sais que Wordpress évalue ce fichier avant de l'activer, car il connaît le nom de mon plugin, son auteur et tout cela avant son activation. Donc, s'il évalue le fichier, pourquoi n'exécute-t-il pas l'appel add_action('init')
?
Ma question a-t-elle un sens? Quelqu'un peut-il m'aider à comprendre pourquoi les choses fonctionnent de cette façon?
Voici un exemple de ce dont je parle:
register_activation_hook(__FILE__, 'halloween_store_install');
function halloween_store_install() {
$hween_options_arr = array(
'currency_sign' => '$'
);
//save our default option values
update_option( 'halloween_options', $hween_options_arr );
}
add_action( 'init', 'halloween_store_init' ); // <-- why is this not executed until my plugin is activated?
function halloween_store_init(){
$labels = array(
'name' => __( 'Products', 'halloween-plugin' ),
'singular_name' => __( 'Product', 'halloween-plugin' ),
'add_new' => __( 'Add New', 'halloween-plugin' ),
'add_new_item' => __( 'Add New Product', 'halloween-plugin' ),
'edit_item' => __( 'Edit Product', 'halloween-plugin' ),
'new_item' => __( 'New Product', 'halloween-plugin' ),
'all_items' => __( 'All Products', 'halloween-plugin' ),
'view_item' => __( 'View Product', 'halloween-plugin' ),
'search_items' => __( 'Search Products', 'halloween-plugin' ),
'not_found' => __( 'No products found', 'halloween-plugin' ),
'not_found_in_trash' => __( 'No products found in Trash', 'halloween-plugin' ),
'menu_name' => __( 'Products', 'halloween-plugin' )
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_ui_menu' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => null,
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' )
);
register_post_type( 'halloween-products', $args);
}
WordPress est une application et tout ce qui est exécuté dans cette application est appelé par des points d'ancrage.
Ensuite, les 2 fonctions de hook principales sont add_action
et add_filter
, mais comme vous l'avez vu, register_activation_hook
et register_deactivation_hook
sont d'autres fonctions utilisées dans le contexte d'activation et de désactivation.
Il existe plus de fonctions de définition de hook, telles que des fonctions qui accrocheront des actions sensibles au temps (pseudo-cron) comme wp_schedule_event
par exemple.
Le codex offre une bonne liste de hooks d’action disponibles (classés par leur séquence généralement appelée) à utiliser avec add_actions
et les filtres à utiliser avec add_filter
.
Je ne suis pas au courant d'une telle liste pour tous les crochets définissant des fonctions.
Comme je l'ai dit dans mon commentaire, la plupart de ces fonctions sont simplement des wrappers intelligents pour les fonctions call_user_func
de PHP qui donnent un contexte à ces hooks.
Ainsi, lorsqu'un plugin ou un thème est installé, il ne s'exécutera pas automatiquement même si leurs fichiers sont techniquement lus (au moins les fichiers principaux le sont).
Dans le fichier principal d'un plugin ou theme , vous trouverez une section de commentaire définissant le paramètre du plugin/thème, telle que le nom du thème, l'auteur, la version, etc.
Dans les thèmes, le fichier style.css
serait lu et contiendrait quelque chose de similaire à ceci
/*
Theme Name: Twenty Thirteen
Theme URI: http://wordpress.org/themes/twentythirteen
Author: the WordPress team
Author URI: http://wordpress.org/
Description: The 2013 theme for WordPress takes us back to the blog, featuring a full range of post formats, each displayed beautifully in their own unique way. Design details abound, starting with a vibrant color scheme and matching header images, beautiful typography and icons, and a flexible layout that looks great on any device, big or small.
Version: 1.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: black, brown, orange, tan, white, yellow, light, one-column, two-columns, right-sidebar, flexible-width, custom-header, custom-menu, editor-style, featured-images, microformats, post-formats, rtl-language-support, sticky-post, translation-ready
Text Domain: twentythirteen
This theme, like WordPress, is licensed under the GPL.
Use it to make something cool, have fun, and share what you've learned with others.
*/
De même, dans le fichier principal PHP d'un plugin, vous trouverez une section de commentaires contenant quelque chose de similaire à celui-ci.
/*
Plugin Name: My Toolset
Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
Description: This describes my plugin in a short sentence
Version: 1.5
Author: John Smith
Author URI: http://URI_Of_The_Plugin_Author
License: GPL2
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Domain Path: /languages
Text Domain: my-toolset
*/
Enfin, une fois qu'un thème/plugin est activé, il continue à charger le reste de ses fichiers en suivant la séquence de chargement des points d'ancrage de WP et charge tout ce que les développeurs ont accroché à ces points ou filtres d'action.
Et dans les fonctions créées par ces développeurs, toute la magie se produit pour ce plugin ou thème particulier.
Une explication assez complète et intéressante à lire de la séquence de chargement de WP a été faite par userabuser here .