web-dev-qa-db-fra.com

Add_settings_field () paramétrant le rappel?

J'essaie de créer une page de paramètres plutôt volumineuse et étendue avec diverses options de type très similaire.

Puisqu'il y aura environ 20 champs différents et que les différences entre la plupart d'entre eux sont simplement leurs identifiants, j'aimerais éviter de créer un rappel distinct pour chacun d'eux.

Est-il possible de faire un rappel avec une variable pour les paramètres ID de chacun de ces champs? De cette façon, un rappel peut traiter différents champs de paramètres du même type.

J'ai essayé d'utiliser le paramètre $ args pour add_setitngs_feild (), mais malheureusement, cela ne fonctionne pas. Par exemple:

add_settings_field('name', 'Field Name', array($this, 'fieldCallback'), 'SettingsGrouP', 'SettingsSection', array("settingID!")); 


function fieldCallback($id)
{
    echo "<input id='" . $id . "'/>";//etc, etc
}

fieldCallback est appelé, mais l'ID de l'entrée est vide.

4

Le dernier argument $args optionnel que vous pouvez passer à add_settings_fields() est passé à callback. Il semble donc que vous puissiez utiliser le même rappel très bien.

J'espère que j'ai raison parce que je suis tombé sur cette question il y a deux minutes à cause de discussions en discussion. :)

PS a examiné le code et il est en effet relativement récent, avant que les arguments d'environ 2.9 n'aient pas été transmis.

2
Rarst

La manière dont Wordpress transmet les arguments à la fonction de rappel est un peu délicate, car la fonction de rappel reçoit le tableau entier $args en tant que paramètre. Vous pouvez donc modifier la fonction comme suit:

function fieldCallback(array $args)
{
    echo "<input id='" . $args[0] . "'/>";//etc, etc
}

et vous laissez add_settings_field tel quel.

0
Jacer Omri

Dans le dernier argument (facultatif) $args de la fonction add_settings_field(), vous pouvez utiliser array('label_for' => 'something') tel qu'il est écrit dans la documentation (voir http://codex.wordpress.org/Function_Reference/add_settings_field ).

Donc si vous voulez passer l'id de votre champ, utilisez 'label_for' pour cela :)

0
kaciak