J'essaie d'incorporer une liste de cases à cocher dans la page des paramètres d'administration de mon plug-in, à partir de laquelle les utilisateurs peuvent sélectionner quelques pays dans la liste de tous les pays.
Jusqu'ici j'ai fait ceci:
add_action( 'admin_init', 'register_page_options' );
function register_page_options() {
// Add Section for option fields
add_settings_section( 'aicp_section', __( '....text here....', 'aicp' ), 'display_section', 'aicp_settings' ); // id, title, display cb, page
// Add Field for selecting countries for which you wanna ban ads
add_settings_field( 'aicp_country_list', __( 'Select the countries', 'aicp' ), 'country_list_field', 'aicp_settings', 'aicp_section' ); // id, title, display cb, page, section
// Register Settings
register_setting( 'aicp_settings', 'aicp_settings_options', array( $this, 'validate_options' ) );
}
// now comes the section for checkbox
function country_list_field() {
$options = get_option( 'aicp_settings_options' );
?>
<input type="checkbox" name="aicp_settings_options[country_list][]" value="AF"<?php checked( 'AF' == $options['country_list'] ); ?> /> Afganistan
<input type="checkbox" name="aicp_settings_options[country_list][]" value="AX"<?php checked( 'AX' == $options['country_list'] ); ?> /> Aland Islands
<?php
}
Remarque: Ce n'est pas tout le code, mais une petite partie de ce code pour vous donner une idée de ma question.
Maintenant, comme vous pouvez le constater, les cases ci-dessus sont cochées. Toutes les options sélectionnées doivent être stockées sous la forme comma seperated
, comme AF, AX, IN, US, etc. afin que, lorsque je dois travailler avec ces données, je puisse simplement les nommer explode
. et utilise.
Quoi qu'il en soit, après avoir un peu creusé, j'ai trouvé cette réponse: Comment utiliser la case à cocher et le bouton radio dans la page des options? qui a montré comment gérer les cases à cocher et les cases d'option radio les paramètres api.
Mais le problème est que, comme j'utilise la case à cocher pour une liste de pays, je ne peux pas simplement utiliser la checked()
pour voir lesquelles de la case à cocher sont sélectionnées car il y a une tonne de nom de pays et l'utilisateur peut sélectionner l'un des noms de pays. eux ou tous ou certains d'entre eux.
Aussi, quand j'ai vérifié ce lien: https://stackoverflow.com/questions/6881039/how-to-handle-multiple-checkboxes-in-a-php-form il m'a montré d'utiliser []
avec le nom pour le checkbox
afin qu'ils puissent être stockés sous forme de tableau.
Maintenant, alors que j'utilise l'API de paramètres WP, j'utilise déjà un nom tel que aicp_settings_options[country_list]
qui est lui-même un tableau. Donc, devrais-je avoir à créer un tableau à 2 dimensions comme ceci: aicp_settings_options[country_list][]
?
Je ne comprends vraiment pas comment dois-je récupérer les données et les stocker. Aussi, comment puis-je facilement vérifier quelles cases sont cochées par l'utilisateur.
Ce serait formidable si quelqu'un peut aider. Merci d'avance.
Au lieu d’utiliser checked()
, vous pouvez utiliser in_array()
comme indiqué ci-dessous -
<input type="checkbox" name="aicp_settings_options[country_list][]" value="AF"<?php echo in_array('AF', $options['country_list']) ? 'checked' : ''; ?> /> Afganistan
J'espère que ça aide.
add_action( 'admin_init', 'register_page_options' );
function register_page_options() {
if (false == get_option('aicp_settings_options')) {
add_option('aicp_settings_options');
}
// Add Section for option fields
add_settings_section( 'aicp_section', __( '....text here....', 'aicp' ), 'display_section', 'aicp_settings' ); // id, title, display cb, page
// Add Field for selecting countries for which you wanna ban ads
add_settings_field( 'aicp_country_list', __( 'Select the countries', 'aicp' ), 'country_list_field', 'aicp_settings', 'aicp_section' ); // id, title, display cb, page, section
// Register Settings
register_setting( 'aicp_settings', 'aicp_settings_options', array( $this, 'validate_options' ) );
}
// now comes the section for checkbox
function country_list_field() {
$options = get_option( 'aicp_settings_options' );
$value = array();
if (isset($options['country_list']) && ! empty($options['country_list'])) {
$value = $options['country_list'];
}
$html = '<input type="checkbox" name="aicp_settings_options[country_list][]" value="AF"'. in_array('AF', $value) ? 'checked' : '' .'/> Afganistan';
$html .= '<input type="checkbox" name="aicp_settings_options[country_list][]" value="AX"'. in_array('AX', $value) ? 'checked' : '' .'/> Aland Islands';
echo $html;
}