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).
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:
Est-ce que quelqu'un peut m'aider à accomplir ceci?
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.