j'ai besoin de créer une fonction de rappel avec une case à cocher multiple avec toutes les catégories Web/blog en tant qu'options multiples.
mes add_settings_fields sont:
add_settings_field(
'select_page',
'Select Blog Page', /
'journal_combo_select_page_callback',
'journal_theme_blog_2_col',
'blog_page_blog_2_col_section'
);
add_settings_field(
'limit_posts',
'Limit Posts',
'journal_limit_posts_callback',
'journal_theme_blog_2_col',
'blog_page_blog_2_col_section'
);
add_settings_field( // $id, $title, $callback, $page, $section, $args
'check_categories', // $id
'Choose Categories', // $title
'journal_check_cats_callback', // $callback -
'journal_theme_blog_2_col', // $page
'blog_page_blog_2_col_section' // $section
);
dois-je déclarer une sorte de tableau dans settings_field 'check_categories' pour communiquer avec la fonction de rappel?
function journal_check_cats_callback() {
$options = get_option('journal_theme_blog_2_col');
$pag = journal_theme_blog_2_col;
$_cats = get_terms( 'category' );
$html = '';
foreach ($_cats as $term) {
$checked = isset( $term->term_id ) ? $term->term_id : '0' ;
$html .= sprintf( '<input type="checkbox" id="%1$s[%2$s]" name="journal_theme_blog_2_col[]" value="%2$s"%3$s />', $pag, $term->term_id, checked( $checked, $options['check_categories'], false ) );
$html .= sprintf( '<label for="%1$s[%3$s]"> %2$s</label><br>', $pag, $term->name, $term->term_id );
}
$html .= sprintf( '<span class="description"> %s</label>', '' );
echo $html;
}
MODIFIER:
eh bien, j'essaie de faire fonctionner ce code, mais ce n'est pas encore tout à fait silencieux ... au moment où je clique sur le bouton Enregistrer (soumettre), les valeurs sont enregistrées dans la table wp_options. Par exemple:
dans settings_section, j'ai trois settings_fields. Une liste déroulante (select_page), un champ de texte en entrée (limit_posts) et une case à cocher multiples avec des catégories de blog (check_categories) et les données suivantes sont enregistrées dans la table wp-options:
a: 4: {s: 11: "select_page"; s: 1: "4"; s: 11: "limit_posts"; s: 3: "100"; i: 0; s: 2: "13"; i : 1; s: 1: "7";}
et voici le tableau correspondant:
Tableau ([select_page] => 4 [limit_posts] => 100 [0] => 13 [1] => 7)
Problèmes à résoudre: 1 - les cases à cocher ne restent pas cochées! Et bien sûr, si je clique à nouveau sur Enregistrer sans en vérifier les nouveaux, les valeurs du tableau des options sont effacées.
2 - J'ai aussi réalisé que les "check_categories" ne sont pas sauvegardées dans la valeur sérialisée ... Je pense donc que c'est un problème, car je ne sais pas comment filtrer uniquement les valeurs de tableau de "check_categories"
Quelqu'un peut m'aider?
Merci, Nelson
J'ai eu le même problème, et voici ce qui fonctionne pour moi:
function journal_check_cats_callback() {
$options = get_option('journal_theme_blog_2_col');
$pag = journal_theme_blog_2_col;
$_cats = get_terms( 'category' );
$html = '';
foreach ($_cats as $term) {
$checked = in_array($term->term_id, $options) ? 'checked="checked"' : '';
$html .= sprintf( '<input type="checkbox" id="%1$s[%2$s]" name="%1$s[]" value="%2$s" %3$s />', $pag, $term->term_id, $checked );
$html .= sprintf( '<label for="%1$s[%3$s]"> %2$s</label><br>', $pag, $term->name, $term->term_id );
}
$html .= sprintf( '<span class="description"> %s</label>', '' );
echo $html;
}