web-dev-qa-db-ja.com

フロントエンドで階層チェックボックスを使用してカテゴリメタボックスを作成する方法

私のウェブサイトでは、カスタム投稿タイプ(「場所」)の投稿を投稿することができます。

フロントエンドで投稿を追加または編集するときに、WordPressダッシュボードに表示されるのと同じ "カテゴリ"メタボックスを表示します。
backend categories meta box

これは、「カテゴリ」メタボックスまたは階層型チェックボックスが、投稿が属するカテゴリを表示および編集するための最善の方法であるためです。

フロントエンドの "Categories"メタボックスはどうすればいいですか?

私はJQueryを知っているので、もしあれば気軽にJQueryのものを投入してください。ゼロからのハックではなく、バックエンドでの投稿の追加/編集のためにWordPressが行うことを複製するアプローチを強くお勧めします。

3
ericn

wp_terms_checklist() / wp_category_checklistを試してください。 post_categoryという名前のチェックボックスのリストを出力します。

管理ファイル内で定義されているため、 source ファイルも含める必要があるかもしれません。

あるいはカスタムウォーカーを使用する:

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();
  }
}

それを使用してください:

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