J'essaie d'automatiser, autant que possible, la fonction Paramètres de l'API appelle pour chaque paramètre dans un plugin. En boucle à travers le tableau d'options, et en sortie add_settings_section()
et add_settings_field()
est assez simple:
add_settings_section()
:
$oenology_hooks_tabs = oenology_hooks_get_settings_page_tabs();
foreach ( $oenology_hooks_tabs as $tab ) {
$tabname = $tab['name'];
$tabtitle = $tab['title'];
$tabsections = $tab['sections'];
foreach ( $tabsections as $section ) {
$sectionname = $section['name'];
$sectiontitle = $section['title'];
$sectiondescription = $section['description'];
// Add settings section
add_settings_section(
'oenology_hooks_' . $sectionname . '_section',
$sectiontitle,
'oenology_hooks_' . $sectionname . '_text',
'oenology_hooks_' . $tabname . '_tab'
);
}
}
Et `add_settings_field ():
global $oenology_hooks;
$oenology_hooks = oenology_hooks_get_hooks();
foreach ( $oenology_hooks as $hook ) {
$hookname = $hook['name'];
$hooktitle = $hook['title'];
$hooktab = $hook['tab'];
$hooksection = $hook['section'];
add_settings_field(
'oenology_hooks_' . $hookname,
$hooktitle,
'oenology_hooks_setting_callback',
'oenology_hooks_' . $hooktab . '_tab',
'oenology_hooks_' . $hooksection . '_section',
$hook
);
}
Avec add_settings_field()
, je peux facilement écrire un rappel générique, en passant la $hook
variable au rappel, comme cinquième paramètre de l'appel de fonction:
function oenology_hooks_setting_callback( $hook ) {
$oenology_hooks_options = get_option( 'plugin_oenology_hooks_settings' );
$hookname = $hook['name'];
$hooktitle = $hook['title'];
$hookdescription = $hook['description'];
$hooktype = $hook['type'];
$hooktab = $hook['tab'];
$hooksection = $hook['section'];
$inputvalue = $hookname . '_hide';
$inputname = 'plugin_oenology_hooks_settings[' . $inputvalue . ']';
$textareaname = 'plugin_oenology_hooks_settings[' . $hookname . ']';
$textareavalue = $oenology_hooks_options[$hookname];
if ( 'Filter' == $hooktype ) {
?>
<input type="checkbox" name="<?php echo $inputname; ?>" value="<?php echo $inputvalue;?>" <?php checked( true == $oenology_hooks_options[$inputvalue] ); ?> />
<span>Hide <?php echo $hooktitle; ?> content?</span><br />
<?php
}
?>
<span class="description"><?php echo $hooktype; ?> Hook: <?php echo $hookdescription; ?></span><br />
<textarea name="<?php echo $textareaname; ?>" cols="80" rows="3" ><?php
echo esc_textarea( $textareavalue );
?></textarea>
<?php
}
Cependant, il semble qu'il add_settings_section()
n'y ait pas de $args
paramètre analogue ; ainsi, je ne peux pas utiliser la même méthode pour passer la $section
variable au rappel.
Ainsi, ma question: existe-t-il un moyen de passer une variable au add_settings_section()
rappel, ou une autre façon de créer un rappel analogue à ce que je fais add_settings_field()
?
ÉDITER:
@Bainternet a réussi! Voici mon code de travail:
/**
* Callback for add_settings_section()
*
* Generic callback to output the section text
* for each Plugin settings section.
*
* @param array $section_passed Array passed from add_settings_section()
*/
function oenology_hooks_sections_callback( $section_passed ) {
global $oenology_hooks_tabs;
$oenology_hooks_tabs = oenology_hooks_get_settings_page_tabs();
foreach ( $oenology_hooks_tabs as $tab ) {
$tabname = $tab['name'];
$tabsections = $tab['sections'];
foreach ( $tabsections as $section ) {
$sectionname = $section['name'];
$sectiondescription = $section['description'];
$section_callback_id = 'oenology_hooks_' . $sectionname . '_section';
if ( $section_callback_id == $section_passed['id'] ) {
?>
<p><?php echo $sectiondescription; ?></p>
<?php
}
}
}
}
la source
extract( $args, EXTR_SKIP );
au début deoenology_hooks_setting_callback()
, afin que vous n'ayez pas à enregistrer chaque partie du tableau dans un nouveau$var
? Celles-ci seront alors disponibles avec$'name_inside_the_array
, par ex. '$ title,
$ tab`, etc.Réponses:
si vous regardez la fonction do_settings_sections plus spécifiquement la ligne 1164 où la fonction de rappel est exécutée:
vous pouvez voir que le tableau $ section est passé à la fonction de rappel, vous pouvez donc identifier le rappel par le
$section['id']
j'espère que cela fait depuis.
Mise à jour
voici un exemple, si votre rappel add_settings_section pour toutes les sections a été nommé,
oenology_hooks_section_callback
vous pouvez l'identifier comme ceci:et par faire des choses, je veux dire faire tout ce que vous voulez faire avec ce rappel de section.
la source
$section['id']
?id
sera le premier argumentadd_settings_section()
Je sais que c'est une vieille question mais je mettrai mes deux cents dedans, juste au cas où quelqu'un d'autre viendrait; une façon plus simple de le faire serait d'écrire votre propre modification de la
add_settings_section()
fonction, qui n'ajouterait à la fin qu'un paramètre d'argument de rappel.Cela ressemblerait à ceci (ou quelque chose comme ça)
Maintenant, vous utiliserez simplement ceci au lieu de la fonction native wordpress et accéderez à vos arguments de rappel via la
'callbackargs'
clé du tableau de la manière habituelle, comme ceciQue nous pourrions utiliser pour passer à une autre fonction:
Ou les arguments de rappel peuvent être eux-mêmes un tableau que nous utilisons:
Tout cela est possible car tout ce
add_settings_section()
qui se passe est d'ajouter un nouveau membre de tableau à la$wp_settings_sections
variable globale, ce nouveau membre de tableau pourrait être un tableau lui-même contenant un nombre quelconque de clés avec des noms différents, qui pourraient être utilisés, par n'importe quelle fonction qui savait qu'ils étaient là. Lorsquedo_settings_sections
appelle lacall_user_func_array
passe un$sections
paramater comme Bainternet a noté, cela signifie que l'ensemble du réseau , nous avons ajouté à$wp_settings_sections
enmy_add_settings_section()
est passé dans notre rappel, ce qui signifie que nous avons accès à tous les nouveaux membres du tableau nous ajoutons comme lecallbackargs
permet notre fonction d'avoir une pleine rappel à part entière.Même si je suis sûr que cela pourrait être évident, j'ai pensé que je pourrais simplement l'expliquer au cas où quelqu'un qui serait confus le verrait.
la source
Vous pouvez également toujours utiliser une approche plus générale, sans chercher l'implémentation de fonction particulière (c'est-à-dire sans vérifier si add_settings_section passe quoi que ce soit implicitement). Cette approche générale utilise la fermeture PHP.
Comment l'utiliser: dans chaque endroit où vous passez un nom de fonction, au lieu de cela, passez une fonction anonyme, avec utilisation en elle.
Exemple:
au lieu de
vous pouvez utiliser:
la source