web-dev-qa-db-fra.com

Ajouter une série de cases à cocher aux options de thème

Bonjour, j’ai fait une option de thème en ce tutoriel

Ces options ont plusieurs types de cases à cocher. Je ne sais pas comment le faire fonctionner. J'essaie d'exclure une page en utilisant ce multicheck. Ceci est mon tableau avec des options:

$pages = get_pages('sort_column=post_parent,menu_order');
$pageids = array();
    foreach ($pages as $page) {
        $pageids[$page->ID]= $page->post_title;
    }
array( "name" => "Exclude page",
        "desc" => "",
        "id" => $shortname."_excludepage",
        "type" => "multicheck",
        "options" => $pageids,
        "std" => ""),

Cet écran montre à quoi cette fonction ressemble dans ma base de données:

http://i.stack.imgur.com/QFwV7.png

512 est l'ID d'une page que j'essaie d'exclure.

On dirait ça dans admin:

http://i.stack.imgur.com/31TQa.png

Dans mon modèle, j'ai utilisé cette méthode standart pour l'exclusion:

wp_list_pages("exclude=get_option('src_excludepage'));

S'il vous plaît aidez-moi avec cette fonction! Je vous remercie!

1
Denis Belousov

Vous voulez un conseil honnête? Travaillez depuis une meilleure base de code.

Bien que ce ne soit pas votre faute, il existe des centaines de blogs avec des variantes de code similaire, je ne sais pas d'où il provient, mais je vois un code similaire "beaucoup" ...

Si vous pouvez vous débrouiller sans tenir la main et gérer simplement avec une bonne base de code, je suggérerais ce qui suit ..

http://themeshaper.com/sample-theme-options/

Ce n’est pas l’exemple le plus sophistiqué ou le plus avancé, mais l’approche est solide, elle utilise une seule option pour stocker toutes les valeurs et utilise également les paramètres api pour gérer les options.

2
t31os

En supposant que votre back-end fonctionne et que vous puissiez vérifier plusieurs champs et que les valeurs de champ sont réellement stockées sous forme de tableau, utilisez:

$exclude = get_option('src_excludepage');
wp_list_pages(array(
      "exclude" => implode(',', $exclude['options']),
   ));

PS: le tutoriel que vous utilisez présente une manière assez étrange de gérer "multicheck". Une méthode beaucoup plus simple consiste à ajouter [] aux noms d'entrée des cases à cocher ...

Mise à jour:

dans la fonction mytheme_admin(), ajoutez un autre cas:

 case "page_multicheck":
  option_wrapper_header($value);

  $pages = get_pages('sort_column=post_parent,menu_order');
  $pageids = array();
  foreach ($pages as $page){
    $pageids[$page->ID] = $page->post_title;

    $input_id = $value['id'] . '_' . $page->ID;
    $checkbox_setting = get_settings($value['id']);
    if (in_array($page->ID, $checkbox_setting)) $checked = "checked=\"checked\""; else $checked = "";
     ?>
     <input type="checkbox" name="<?php echo $value['id']; ?>[]" id="<?php echo $input_id; ?>" <?php echo $checked; ?> />
     <label for="<?php echo $input_id; ?>"><?php echo $page->post_title; ?></label
     ><br />
     <?php
  }
  option_wrapper_footer($value);
  break;

dans le tableau $options, supprimez l'ancienne option et ajoutez:

  array("name" => "Exclude page",
        "desc" => "",
        "id" => $shortname."_excludepage",
        "type" => "page_multicheck",
        "options" => array(),
        "std" => ""),

maintenant, théoriquement, mon code ci-dessus devrait fonctionner ...

1
onetrickpony