私はこのコードです:
/* Hook to admin_menu the yasr_add_pages function above */
add_action('admin_menu', 'yasr_add_pages');
function yasr_add_pages() {
//Add Settings Page
add_options_page(
'Yet Another Stars Rating: Settings', //Page Title
__('Yet Another Stars Rating: Settings', 'yasr'), //Menu Title
'manage_options', //capablity
'yasr_settings_page', //menu slug
'yasr_settings_page_content' //The function to be called to output the content for this page.
);
}
/* Settings Page Content */
function yasr_settings_page_content() {
if ( !current_user_can( 'manage_options' ) ) {
wp_die( __( 'You do not have sufficient permissions to access this page.', 'yasr' ) );
}
include (YASR_ABSOLUTE_PATH . '/yasr-settings-page.php');
} //End yasr_settings_page_content
そして、これがyasr-settings-pageの内容です。
<div class="wrap">
<h2>Settings API Demo</h2>
<form action="options.php" method="post">
<?php
settings_fields( 'yasr_multi_form' );
do_settings_sections( 'yasr_settings_page' );
submit_button( 'Salva' );
?>
</form>
</div>
<?php
add_action( 'admin_init', 'yasr_multi_form_init' );
function yasr_multi_form_init() {
register_setting (
'yasr_multi_form', // A settings group name. Must exist prior to the register_setting call. This must match the group name in settings_fields()
'yasr_multi_form_data' //The name of an option to sanitize and save.
);
add_settings_section( 'yasr_section_id', 'Gestione Multi Set', 'yasr_section_callback', 'yasr_settings_page' );
add_settings_field( 'yasr_field_name_id', 'Nome Set', 'yasr_nome_callback', 'yasr_settings_page', 'yasr_section_id' );
}
function yasr_section_callback() {
echo "Descrizione sezione";
}
function yasr_nome_callback() {
$option = get_option( 'yasr_multi_form_data' );
$name = esc_attr( $option['name'] );
echo "<input type='text' name='yasr_multi_form_data[name]' value='' />";
}
設定ページの出力settings_field
関数(私のソースでは入力タイプが隠されているのを見ることができます)と送信ボタンが、do_settings_section
をレンダリングすることができず、その理由が本当にわかりません。助言がありますか?
私が見たものから、あなたは出力とその出力を準備するためのものであるコードを混ぜています。さらに、準備は出力が始まった後に来ています。変に見えます。
ここで私はあなたのコードを更新しました、そしてそれは大丈夫です:
/* Hook to admin_menu the yasr_add_pages function above */
add_action( 'admin_menu', 'yasr_add_pages' );
function yasr_add_pages() {
//Add Settings Page
add_options_page(
'Yet Another Stars Rating: Settings', //Page Title
__( 'Yet Another Stars Rating: Settings', 'yasr' ), //Menu Title
'manage_options', //capability
'yasr_settings_page', //menu slug
'yasr_settings_page_content' //The function to be called to output the content for this page.
);
}
add_action( 'admin_init', 'yasr_multi_form_init' );
function yasr_multi_form_init() {
register_setting(
'yasr_multi_form', // A settings group name. Must exist prior to the register_setting call. This must match the group name in settings_fields()
'yasr_multi_form_data' //The name of an option to sanitize and save.
);
add_settings_section( 'yasr_section_id', 'Gestione Multi Set', 'yasr_section_callback', 'yasr_settings_page' );
add_settings_field( 'yasr_field_name_id', 'Nome Set', 'yasr_nome_callback', 'yasr_settings_page', 'yasr_section_id' );
}
function yasr_section_callback() {
echo "Descrizione sezione";
}
function yasr_nome_callback() {
$option = get_option( 'yasr_multi_form_data' );
$name = esc_attr( $option['name'] );
echo "<input type='text' name='yasr_multi_form_data[name]' value='' />";
}
/* Settings Page Content */
function yasr_settings_page_content() {
if ( ! current_user_can( 'manage_options' ) ) {
wp_die( __( 'You do not have sufficient permissions to access this page.', 'yasr' ) );
}
?>
<div class="wrap">
<h2>Settings API Demo</h2>
<form action="options.php" method="post">
<?php
settings_fields( 'yasr_multi_form' );
do_settings_sections( 'yasr_settings_page' );
submit_button( 'Salva' );
?>
</form>
</div>
<?php
} //End yasr_settings_page_content
そのため、ここでの問題は実際には設定の登録や出力の方法とは関係ありません。私はそれがやって来たと感じたのは、行動の順序についての誤ったタイミングでした。
すべての設定コードを保持するようにファイルを作成し、そのファイルを 'init'のアクションで呼び出します。呼び出している 'admin_init'アクションは正しいですが、admin_initが既に実行された後に呼び出されているだけです。