web-dev-qa-db-fra.com

Lequel utiliser pour exécuter du code lors de l’enregistrement d’une page de paramètres de plug-in?

J'écris un plugin avec une page de paramètres/option et je veux que du code php soit exécuté chaque fois que quelqu'un enregistre les paramètres sur cette page et cette page seule. Quelles actions dois-je accrocher pour accomplir ceci?

4
Manny Fleurmond

Si vous utilisez l'API Paramètres , vous devez utiliser un rappel de désinfection:

register_setting( $option_group, $option_name, $sanitize_callback );

Le mythe est que le $sanitize_callback est en fait un filtre pour vos options lorsqu'il est enregistré dans la base de données. C'est l'endroit où vous pouvez faire quelque chose avec votre code personnalisé.

C'est l'exemple de code:

register_setting( 'wpse38180', 'wpse38180', 'sanitize_wpse38180' );

function sanitize_wpse38180( $options )
{
    // Do anything you want

    return $options;
}
3
Anh Tran

Il existe un filtre de pré-mise à jour , appliqué juste après le filtre de désinfection. Il s'appelle pre_update_option _ optionname et prend les valeurs anciennes et nouvelles de l'option en tant que paramètres. Utilisez-le comme ceci:

register_setting( $my_option_group , $my_option_name );
// 10 is the filter priority, 2 is the number of arguments
add_filter( 'pre_update_option_' . $my_option_name , 'my_callback', 10, 2 );

function my_callback( $newvalue, $oldvalue ) {
    // $newvalue has already been sanitized, but not yet saved
    // do whatever you like here
    return 'filtered value';
}

L'avantage de cette méthode est que l'intention est plus claire et que vous n'avez pas à obtenir manuellement l'ancienne valeur de l'option (si vous en avez besoin), car elle a été transmise pour vous.

Ce filtre est spécifique à un champ. Par conséquent, si vous souhaitez l'exécuter une seule fois lors de la sauvegarde des options, ajoutez-le à un seul champ.

1
Bennett McElwee