Exécuter la fonction APRÈS que les options du thème soient enregistrées?

10

Question étrange, comment puis-je exécuter une fonction personnalisée après que mes paramètres de thème sont enregistrés? Je vois que la fonction register_settings () a un rappel de nettoyage, mais qui s'exécute avant que les paramètres ne soient modifiés. J'ai besoin de quelque chose pour courir après leur sauvegarde. Y a-t-il une action ou un filtre que je peux utiliser pour faire cela?

ÉDITER -

Donc j'ai ce réglage que j'ai fait:

add_settings_section(
    'kjd_body_background_settings_section', // ID hook name
    null, // label
    null, // function name
    'kjd_body_background_settings' // page name
);


    add_settings_field(
        'kjd_body_background_colors', // ID hook name
        null, //label
        null, //callback
        'kjd_body_background_settings', // page name
        'kjd_body_background_settings_section' // parent section 
);

et cette fonction:

function kjd_update_stylesheet( $oldvalue, $_newvalue ){
   echo 'updated!';
   die();
}
add_action('update_options_kjd_body_background_settings','kjd_update_stylesheet',10, 2);

//add_action('update_options_kjd_body_background_colors','kjd_update_stylesheet',10, 2);
rugbert
la source

Réponses:

18

Utilisez le filtre update_option_{$option}. Il s'exécute après une sauvegarde réussie.

$option est le nom de votre option, et vous obtenez l'ancienne et la nouvelle valeur comme paramètres.

De wp-includes/option.php:

do_action( "update_option_{$option}", $oldvalue, $_newvalue );

Utilisez-le comme ceci pour une option wpse_themesettings:

add_action( 'update_option_wpse_themesettings', 'wpse_check_settings', 10, 2 );

function wpse_check_settings( $old_value, $new_value )
{
    // do something
}
fuxia
la source
Hmmm d'accord. Donc, si j'ai des dizaines d'options, sur des dizaines de pages / groupes d'options, je devrais faire une option cachée pour chaque page pour exécuter la même fonction?
rugbert
Non, vous utilisez simplement les noms des options que vous souhaitez enregistrer. Pas d'options cachées supplémentaires.
fuxia
ouais j'y ai pensé en entrant dans le boulot et j'ai dit "duh"! Merci pour la réponse cependant, vous venez de rendre mon projet 100% plus génial
rugbert
Hé, juste pour que nous soyons clairs. Quand vous dites d'utiliser update_option {$ option}, vous voulez dire l'argument $ page dans la fonction register_settings (), n'est-ce pas? comme add_settings_field( $id, $title, $callback, $page, $section, $args ); ou est-ce le nom de l'ID?
rugbert
Aussi - j'ai juste essayé les deux et ils ne semblaient pas déclencher la coutume. Voir ma question mise à jour pour le code que j'ai utilisé
rugbert