サポート » 使い方全般 » 親子カテゴリをプルダウンで選択したいです。

  • 親カテゴリをプルダウンで選択すると、選択した親に紐付いた子カテゴリが選択できるように実装したいです。
    0)プルダウンを選択したあとに、送信ボタンを押すつくりです。
    1)この時、親カテゴリと子カテゴリは異なるプルダウンで実装します。
    2)親だけを選択し、送信ボタンを押すことがあります。

    以下、途中までWEBに載っている情報をかき集めて実装したものです。自分には手に負えなかったのでどなたか実装方法をご存じであれば是非教えていただきたいです。

    [[こちらのタグで呼び出しをしています。]]

    <?php echo ret_category_dropmenu() ?>

    [[以下、function.phpに記述した内容]]

    //======================================================================
    // カテゴリードロップダウンメニュー生成
    //======================================================================
    function ret_category_dropmenu() {
    $retCode;
    // 最上位(トップ)カテゴリー取得
    $categories = get_categories( array(
    'type' => 'post',
    'parent' => 77,
    ) );
    $retCode = "<select id='dropmenu'>";
    // 親をループ
    foreach ( $categories as $category ) {
    //カテゴリー取得
    $category_link = get_category_link( $category->term_id );
    // カテゴリー設定
    $retCode .= "<option value='$category->term_id' class='b_cute'>$category->name ";
    // 親のカテゴリーIDを元に子のカテゴリーがいるか取得
    $retCode .= get_category_loop( $category->cat_ID );
    // 終わりの<li>
    $retCode .= "</option>";
    }
    // 終わりの<ul>
    $retCode .= "</select>";
    return $retCode;
    }
    
    //======================================================================
    // 引数で受け取ったカテゴリーIDを元に、子供カテゴリーを取得
    // 引数:親カテゴリーID
    //======================================================================
    function get_category_loop( $category_id ) {
    // カテゴリー取得
    $categories = get_categories( array(
    'type' => 'post',
    'parent' => $category_id,
    ) );
    // 子カテゴリーあり
    if ( $categories != null and count( $categories ) > 0 ) {
    $retCode .= "";
    foreach ( $categories as $category ) {
    //カテゴリー取得
    $category_link = get_category_link( $category->term_id );
    // カテゴリー設定
    $retCode .= "<option value='$category->term_id' class='s_cate'> $category->name ";
    // 親のカテゴリーIDを元に子のカテゴリーがいるか取得
    $retCode .= get_category_loop( $category->cat_ID );
    // 終わりの<li>
    $retCode .= "</option>";
    }
    $retCode .= "";
    }
    return $retCode;
    }
    
    add_action( 'init', 'ret_category_dropmenu', 0 );
    
  • このトピックに返信するにはログインが必要です。