WordPress

settings api — Jak zapisać opcje pola wyboru na stronie opcji wtyczek

  • 14 lutego, 2020
  • 4 min read
settings api — Jak zapisać opcje pola wyboru na stronie opcji wtyczek


Po pierwsze: jestem naprawdę nowicjuszem. Użyłem więc szablonu dla mojej strony opcji i spróbowałem go dostosować (do tej pory działa całkiem nieźle).

O mojej wtyczce: Tworzy typy postów i niektóre meta-boxy w nich. Metaboxy mają kilka pól, a zapisywanie pól działa jak dotąd całkiem nieźle.

Teraz dochodzę do punktu, w którym chcę, aby moje opcje nie tylko były wyświetlane na stronie opcji, ale zapamiętywały wprowadzone wartości.

Próbuję z „krótkim fragmentem”, ponieważ wszystkie inne opcje działają tak samo.

<?php
add_action( 'admin_menu', 'my_admin_menu' );
function my_admin_menu() {
add_options_page( __('Nutri+', 'nutriplus' ), __('Nutri+', 'nutriplus' ), 'manage_options', 'my-plugin', 'my_options_page' );
}
add_action( 'admin_init', 'my_admin_init' );

function my_admin_init() {
register_setting( 'my-settings-group', 'my-plugin-settings' );
add_settings_section( 'section-1', __( 'General Settings', 'nutriplus' ), 'section_1_callback', 'my-plugin' );
add_settings_field( 'field-1-1', __( 'Enable Food Post Type', 'nutriplus' ), 'field_1_1_callback', 'my-plugin', 'section-1' );
add_settings_field( 'field-1-2', __( '- Enable Nutritional Information Meta Box', 'nutriplus' ), 'field_1_2_callback', 'my-plugin', 'section-1' );
add_settings_field( 'field-1-3', __( '- Enable Additional Information Meta Box', 'nutriplus' ), 'field_1_3_callback', 'my-plugin', 'section-1' );
add_settings_field( 'field-1-4', __( 'Enable Diet Post Type', 'nutriplus' ), 'field_1_4_callback', 'my-plugin', 'section-1' );

function my_options_page() {
?>
  <div class="wrap">
      <h2><?php _e('Nutri+ Options', 'nutriplus'); ?></h2>
      <form action="options.php" method="POST" class="np-options">
      <?php settings_fields('my-settings-group'); ?>
      <?php do_settings_sections('my-plugin'); ?>
      <?php submit_button(); ?>
      </form>
  </div>
<?php }

function section_1_callback() {
_e( 'Here you can configure Nutri+ on a per post type base and enable/disable features.', 'nutriplus' );
}
function field_1_1_callback() {

$settings = (array) get_option( 'my-plugin-settings' );
$field = "field_1_1";
$value = esc_attr( $settings[$field] );
 echo "<input id='enable_food_post_type' name="my-plugin-settings[$field]" type="checkbox" value="true" checked />";
}
function field_1_2_callback() {

$settings = (array) get_option( 'my-plugin-settings' );
$field = "field_1_2";
$value = esc_attr( $settings[$field] );
 echo "<input id='enable_nutition_meta_box' name="my-plugin-settings[$field]" type="checkbox" value="true" checked />";
}
function field_1_3_callback() {

$settings = (array) get_option( 'my-plugin-settings' );
$field = "field_1_3";
$value = esc_attr( $settings[$field] );
 echo "<input id='enable_additional_meta_box' name="my-plugin-settings[$field]" type="checkbox" value="true" checked />";
}
function field_1_4_callback() {

$settings = (array) get_option( 'my-plugin-settings' );
$field = "field_1_4";
$value = esc_attr( $settings[$field] );
 echo "<input id='enable_diet_post_type' name="my-plugin-settings[$field]" type="checkbox" value="true" checked />";
}

function my_settings_validate_and_sanitize( $input ) {

$settings = (array) get_option( 'my-plugin-settings' );

    if ( $some_condition == $input['field_1_1'] ) {
    $output['field_1_1'] = $input['field_1_1'];
    } else {
    add_settings_error( 'my-plugin-settings', 'invalid-field_1_1', __('Error in Field "Enable Food Post Type"', 'nutriplus'), 'error' );
    }
    if ( $some_condition == $input['field_1_2'] ) {
    $output['field_1_2'] = $input['field_1_2'];
    } else {
    add_settings_error( 'my-plugin-settings', 'invalid-field_1_2', __('Error in Field "Enable Nutritional Information Meta Box"', 'nutriplus'), 'error' );
        }
    if ( $some_condition == $input['field_1_3'] ) {
    $output['field_1_3'] = $input['field_1_3'];
    } else {
    add_settings_error( 'my-plugin-settings', 'invalid-field_1_3', __('Error in Field "Enable Additional Information Meta Box"', 'nutriplus'), 'error' );
    }
    if ( $some_condition == $input['field_1_4'] ) {
    $output['field_1_4'] = $input['field_1_4'];
    } else {
    add_settings_error( 'my-plugin-settings', 'invalid-field_1_4', __('Error in Field "Enable Diet Post Type"', 'nutriplus'), 'error' );
    }

return $output;
}
  1. Nie wiem, czy pola wyboru wymagają oczyszczenia lub zatwierdzenia…
  2. Nie wiem, jak zapisać bieżącą wartość i oczywiście załadować domyślnie. Znalazłem przykłady z funkcjami php zamiast value = „xxx”, ale nie wiem, jak to uwzględnić
  3. I tak… wiem… zaznaczonego atrybutu nie powinno tam być, gdy ma się pojawić bieżąca wartość: )
Warto przeczytać!  Wiele stron chronionych różnymi hasłami. Czy można śledzić wiele haseł jednocześnie?

Może ktoś mi pomoże


Źródło