wake-up-neo.net

Wie erstelle ich eine Kategorien-Meta-Box mit hierarchischen Checkboxen im Frontend?

Meine Website ermöglicht die Veröffentlichung von Beiträgen eines benutzerdefinierten Beitragstyps ("Ort").

Ich möchte die gleiche "Kategorien" -Meta-Box wie im WordPress-Dashboard anzeigen, wenn Sie einen Beitrag im Frontend hinzufügen oder bearbeiten:
backend categories meta box

Dies liegt daran, dass das Meta-Feld "Kategorien" oder die hierarchischen Kontrollkästchen einfach die beste Möglichkeit sind, die Kategorien anzuzeigen und zu bearbeiten, zu denen ein Beitrag gehört.

Wie kann ich die Meta-Box "Categories" im Frontend öffnen?

Ich kenne JQuery, also zögern Sie nicht, JQuery-Zeug hineinzuwerfen, falls es welche gibt. Ich würde nachdrücklich einen Ansatz bevorzugen, um zu replizieren, was WordPress für das Hinzufügen/Bearbeiten eines Posts im Backend tut, anstatt einen Hack von Grund auf.

3
ericn

Versuchen Sie wp_terms_checklist() / wp_category_checklist. Es wird eine Liste von Kontrollkästchen mit dem Namen post_category ausgegeben.

Möglicherweise müssen Sie auch die Datei source einfügen, da diese in den Verwaltungsdateien definiert ist.

Oder verwenden Sie einen benutzerdefinierten Gehwagen:

class MyCategoryWalker extends Walker_Category{

  public function start_el(&$output, $term, $depth, $args){

    $args = wp_parse_args(array(
      'name'    => 'my_category_input',
      'checked' => array(),

    ), $args);

    extract($args);

    $checked = checked(in_array($term->term_id, $checked));

    ob_start(); ?>   

    <li>
      <input type="checkbox" <?php $checked; ?> id="category-<?php print $term->term_id; ?>" name="<?php print $name; ?>[]" value="<?php print $term->term_id; ?>" />
      <label for="category-<?php print $term->term_id; ?>">
        <?php print esc_attr($term->name); ?>
      </label>       

    <?php // closing LI is added inside end_el

    $output .= ob_get_clean();
  }
}

Verwenden Sie es wie folgt:

wp_list_categories(array(
  'walker'   => new MyCategoryWalker(),
  'name'     => 'my_category_input',       // name of the input
  'selected' => array(2, 5, 10),           // checked items (category IDs)
));
3
onetrickpony