it-swarm.com.de

Fügen Sie den Themenoptionen eine Reihe von Kontrollkästchen hinzu

Hallo, ich habe in diesem Tutorial ein Thema ausgewählt

Diese Optionen haben einen Multicheck-Typ nach Kontrollkästchen. Ich weiß nicht, wie ich das hinbekomme. Ich versuche, die Seite mit diesem Multicheck auszuschließen. Dies ist mein Array mit Optionen:

$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" => ""),

Dieser Bildschirm zeigt, wie diese Funktion in meiner Datenbank aussieht:

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

512 ist die ID einer Seite, die ich auszuschließen versuche.

In admin sieht das so aus:

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

In meiner Vorlage verwende ich diese Standardmethode zum Ausschließen:

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

Bitte helfen Sie mir bei dieser Funktion! Vielen Dank!

1
Denis Belousov

Willst du einen ehrlichen Rat? Arbeiten Sie mit einer besseren Codebasis.

Obwohl es nicht deine Schuld ist, gibt es Hunderte von Blogs mit Variationen von ähnlichem Code. Ich bin nicht sicher, woher er stammt, aber ich sehe ähnlichen Code "viel" ...

Wenn Sie ohne das Halten der Hand auskommen und nur mit einer guten Codebasis auskommen können, würde ich Folgendes vorschlagen.

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

Es ist nicht das ausgefallenste oder fortgeschrittenste Beispiel, aber der Ansatz ist solide. Es wird nur eine einzige Option verwendet, um alle Werte zu speichern, und es werden auch die Einstellungen api für die Bearbeitungsoptionen verwendet.

2
t31os

Angenommen, Ihr Back-End funktioniert, und Sie können mehrere Felder überprüfen und feststellen, dass die Feldwerte tatsächlich als Array gespeichert sind, verwenden Sie Folgendes:

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

PS: Das Tutorial, das Sie verwenden, hat eine ziemlich seltsame Art, mit "Multicheck" umzugehen. Eine viel einfachere Methode ist es, [] an die Eingabenamen der Checkbox anzuhängen ...

Update:

in der Funktion mytheme_admin() fügen Sie einen weiteren Fall hinzu:

 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;

entfernen Sie im $options-Array die alte Option und fügen Sie Folgendes hinzu:

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

jetzt sollte theoretisch mein Code oben funktionieren ...

1
onetrickpony