L'API de personnalisation permets de se connecter au moteur de Wordpress afin de modifier les fonctionnalités de base, ou ajouter de nouvelles fonctionnalités.
Le mot "hook" peut être traduit par "crochet" ou "hameçon". Les "hooks" sont une notion essentiel de l'API de personnalisation ( Plugin API ).
Les "hooks" sont des évenements déclenchés à un moment donné durant l'execution de l'application. On peut écouter ces évenements, et définir le code personnalisé qui sera executé au moment ou cet évenement sera déclenché par l'application.
Wordpress distingue deux types de "hooks", les actions et les filtres.
Les filtres concernent la modification le contenu textuel et retourne donc un valeur modifiée. Les actions ne retournent pas de valeur, le code personnalisé est executé, mais l'action de retourne rien par elle même.
Prenons le bout de code suivant et imaginons qu'il est executé par Wordpress au moment ou un article est sauvegardé en base de donnée :
function wp_publish_post( $post ) {
//...
do_action( 'wp_insert_post', $post->ID, $post, true );
}C'est l'appel à la function do_action qui permets de déclencher l'évenement nommé "wp_insert_post". On peut alors executer du code à ce moement précis en récupérant les variables fournies en paramètres de do_action :
//dans functions.php
function email_post_author( $post_id, $post, $update ) {
$email = '[email protected]';
$subject = 'New Post Published';
$message = 'A new post was published : ' . get_permalink( $post->ID );
wp_mail( $email, $subject, $message );
}
//on écoute l'évenement "wp_insert_post"
add_action( 'wp_insert_post', 'email_post_author', 10, 3 );add_actions() accepte 4 paramètres :
- le nom du "hook"
- le nom de la foncction a executé au déclenchement de l'évenement
- l'ordre d'execution de cette fonction si d'autres sont connectées à ce "hook"
- le nombre de paramètres acceptés par cette fonction
function add_scripts() {
wp_deregister_script( 'jquery' );
wp_register_script( 'jquery', 'https://code.jquery.com/jquery-git2.min.js');
wp_enqueue_script( 'jquery' );
}
add_action('wp_enqueue_scripts', 'add_scripts');function search_filter($query) {
if ( !is_admin() && $query->is_main_query() ) {
if ($query->is_search) {
$query->set('post_type', array('post', 'movie'));
}
}
}
add_action('pre_get_posts','search_filter');function my_excerpt_length( $words ) {
return 15;
}
add_filter( 'excerpt_length', 'my_excerpt_length' );function change_wp_search_size($queryVars) {
if ( isset($_REQUEST['s']) ) // Make sure it is a search page
$queryVars['posts_per_page'] = 10; // Change 10 to the number of posts you would like to show
return $queryVars; // Return our modified query variables
}
add_filter('request', 'change_wp_search_size'); // Hook our custom function onto the request filteradd_filter( 'post_class', 'wps_first_post_class' );
function wps_first_post_class( $classes ) {
global $wp_query;
if( 0 == $wp_query->current_post )
$classes[] = 'first_post';
return $classes;
}function replace_copyright( $copyright ) {
// do something to $copyright
return $copyright;
}
add_filter( 'my_footer_filter', 'replace_copyright' );Dans le thème
<div id="footer">
<p class="copyright">
<?php
echo apply_filters( 'my_footer_filter', 'Copyright 2011 By Me' );
?>
</p>
</div><div id="footer">
<!-- ... -->
<?php do_action( 'below_footer', $post ) ?>
</div>