web-dev-qa-db-fra.com

Utilisation de cases à cocher sur la page d'options du plug-in pour un plug-in personnalisé

Je crée mon premier plugin WordPress. C'est un simple plugin qui étend Visual Composer, vous permettant de supprimer les options d'éléments dans VC (indiqué dans la capture d'écran).

 enter image description here 

Sur la page "options" du plugin, je crée un formulaire pour afficher/masquer les éléments. Voici mon code:

// Going to add a conditional statement here to run this vc_remove_element function if the checkbox for Row is selected
vc_remove_element( "vc_row" ); // Row

add_action('admin_menu', 'plugin_admin_settings_tab');

function plugin_admin_settings_tab() {

    add_options_page('Remove Visual Composer Elements', 'Remove Visual Composer Elements', 'manage_options', 'remove_visual_composer_elements', 'plugin_rvce_options_page');

}

?>

<?php function plugin_rvce_options_page() { ?>

<div>

    <form action="options.php" method="post">

        <?php settings_fields('plugin_options'); ?>
        <?php do_settings_sections('plugin'); ?>

        <input name="Submit" type="submit" value="<?php esc_attr_e('Save Changes'); ?>" />

    </form>

</div>

<?php } ?>

<?php

// ADMIN SETTINGS

add_action('admin_init', 'plugin_rvce_admin_init');

function plugin_rvce_admin_init(){

register_setting( 'plugin_options', 'plugin_options', 'plugin_rvce_options_validate' );
add_settings_section('plugin_main', 'Visual Composer Element Settings', 'plugin_rvce_section_text', 'plugin');
add_settings_field('Checkbox Element', 'Row', 'sandbox_checkbox_element_callback', 'plugin', 'plugin_main' );

} 

function sandbox_checkbox_element_callback() {

$options = get_option( 'plugin_options' );

$html = '<input type="checkbox" id="checkbox_example" name="sandbox_theme_input_examples[checkbox_example]" value="1"' . checked( 1, $options['checkbox_example'], false ) . '/>';
$html .= '<label for="checkbox_example"> Hide</label>';

echo $html;

}

?>

<?php function plugin_rvce_section_text() {
    echo '<p>Remove Visual Composer elements from the interface.</p>';
} ?>

<?php // validate our options
function plugin_rvce_options_validate($input) {
$options = get_option('plugin_options');
return $options;
}

Le formulaire semble correct au début, mais lorsque je clique sur la case à cocher et que je l’enregistre, les paramètres ne sont PAS enregistrés. Je peux dire que la fonction sandbox_checkbox_element_callback n'est pas configurée correctement, mais je ne peux pas trouver la bonne façon de le configurer.

Forme:

 enter image description here 

Est-ce que quelqu'un peut m'aider à accomplir ceci?

2
cpcdev

Cela devrait le faire:

// Going to add a conditional statement here to run this vc_remove_element function if the checkbox for Row is selected
vc_remove_element( "vc_row" ); // Row

add_action('admin_menu', 'plugin_admin_settings_tab');

function plugin_admin_settings_tab() {

    add_options_page('Remove Visual Composer Elements', 'Remove Visual Composer Elements', 'manage_options', 'remove_visual_composer_elements', 'plugin_rvce_options_page');
    add_action('admin_init', 'plugin_rvce_admin_init');

}

?>

<?php function plugin_rvce_options_page() { ?>

<div>

    <form action="options.php" method="post">

        <?php settings_fields('plugin_options'); ?>
        <?php do_settings_sections('plugin'); ?>

        <?php submit_button(); ?>

    </form>

</div>

<?php } ?>

<?php

// ADMIN SETTINGS


function plugin_rvce_admin_init(){

register_setting( 'plugin_options', 'plugin_options' );
add_settings_section('plugin_main', 'Visual Composer Element Settings', 'plugin_rvce_section_text', 'plugin');
add_settings_field('Checkbox Element', 'Row', 'sandbox_checkbox_element_callback', 'plugin', 'plugin_main' );

}

function sandbox_checkbox_element_callback() {

$options = get_option( 'plugin_options' );

$checked = ( isset($options['checkbox_example']) && $options['checkbox_example'] == 1) ? 1 : 0;

$html = '<input type="checkbox" id="checkbox_example" name="plugin_options[checkbox_example]" value="1"' . checked( 1, $checked, false ) . '/>';
$html .= '<label for="checkbox_example"> Hide</label>';

echo $html;

}

?>

<?php function plugin_rvce_section_text() {
    echo '<p>Remove Visual Composer elements from the interface.</p>';
} ?>

<?php // validate our options
function plugin_rvce_options_validate($input) {
$options = get_option('plugin_options');
return $options;
}

Vous devez d'abord obtenir la valeur cochée et voir si elle est définie en premier lieu. Parce que lorsque vous décochez la case, le plugin_options dans la base de données dans la table wp_options sera nul. Donc, si ce n'est rien, vous devez définir le $checked à 0, et 1 sinon. De plus, le nom du champ de saisie était incorrect et j'ai remplacé le bouton d'envoi par le bouton par défaut.

Testé sur vingt-seize thèmes et a travaillé pour moi :) J'espère que cela vous aidera.

1
dingo_d