Je cherche un moyen d'ajouter une section de paramètres/des champs de paramètres à la page ~/wp-admin/options-discussion.php
exactement où Core appelle …
do_settings_sections('discussion');
Lorsque j'enregistre le paramètre et ajoute le champ de paramètres, rien ne s'affiche:
function register_setting()
{
register_setting(
'discussion'
,$this->option_name
,array( $this, 'sanitize_setting' )
);
}
public function add_settings_field()
{
add_settings_field(
$this->option_name
,__( 'Label', 'wpse_textdomain' )
,array( $this, 'render_field' )
,'discussion'
,'discussion'
,array()
);
}
Maintenant, je suis curieux de savoir pourquoi rien n’est apparu et jeté le fichier global contenant la section des paramètres juste en dessous de cette ligne:
var_dump( $GLOBALS['wp_settings_sections'] );
La sortie était une simple simple NULL
.
Comment enregistrer une installation ici,sansen enregistrant la section avec
add_settings_section( 'discussion', __( 'Title', 'textdomain' ), 'callback', 'discussion' );
en premier?
La raison pour laquelle je demande "sans enregistrer le paramètre sans la section" est simple: si un autre plugin enregistre la même section par la suite, il écrasera/remplacera la section ajoutée.
EDITPour préciser ce que je demande. Je sais que deux sections default
& avatars
sont déjà présentes sur la page et que je peux y accéder. Le point est que je ne veux pas me connecter aux paramètres de fonctionnalités de base existants, mais ci-dessous eux, juste dans les sections de paramètres que le noyau devrait afficher avec do_settings_sections( 'discussion' );
. Il est également intéressant de noter que la page discussion
n'a jamais été enregistrée par le noyau et ne peut donc pas être utilisée en tant qu'abandon de do_settings_section()
sans pouvoir parcourir les pages (non) enregistrées. Je suis tout à fait d'accord avec une réponse confirmant cela et indiquant: Non, cela ne fonctionne pas. Est-ce un bug. ouvoire mieuxcrée ou aide à créer un patch .
Vous devez d'abord appeler add_settings_section()
, passer un ID unique et l'assigner à la page (nom pauvre) discussion
:
add_settings_section( 'ads_id', 'Extra Settings', 'ads_description', 'discussion' );
Enregistrez ensuite un rappel pour enregistrer votre (vos) champ (s)…
// Register a callback
register_setting(
'discussion',
'ads',
'trim'
);
… Puis enregistrez un ou plusieurs champs:
// Register the field for the "avatars" section.
add_settings_field(
'ads',
'Test field',
'ads_show_settings',
'discussion',
'ads_id',
array ( 'label_for' => 'ads_id' )
);
Voici un exemple très simple:
add_action( 'admin_init', 'ads_register_setting' );
/**
* Tell WP we use a setting - and where.
*/
function ads_register_setting()
{
add_settings_section(
'ads_id',
'Extra Settings',
'ads_description',
'discussion'
);
// Register a callback
register_setting(
'discussion',
'ads',
'trim'
);
// Register the field for the "avatars" section.
add_settings_field(
'ads',
'Test field',
'ads_show_settings',
'discussion',
'ads_id',
array ( 'label_for' => 'ads_id' )
);
}
/**
* Print the text before our field.
*/
function ads_description()
{
?><p class="description">This is the description</p><?php
}
/**
* Show our field.
*
* @param array $args
*/
function ads_show_settings( $args )
{
$data = esc_attr( get_option( 'ads', '' ) );
printf(
'<input type="text" name="ads" value="%1$s" id="%2$s" />',
$data,
$args['label_for']
);
}
Notez le cinquième paramètre pour add_settings_field()
.