サポート » 使い方全般 » wp dropdown categoriesを使って…

  • wp dropdown categoriesを使って…タクソノミーのセレクトメニューって作れませんか?その場合テンプレートファイルは何を利用したらいいのでしょうか?

    下記コードをどうにか変更して利用したいのですが…。
    JavaScript を用いた送信ボタンなしドロップダウンメニュー
    <li id=”categories”><h2><?php _e(‘Posts by Category’); ?></h2>
    <?php wp_dropdown_categories(‘show_option_none=Select category’); ?>

    <script type=”text/javascript”><!–
    var dropdown = document.getElementById(“cat”);
    function onCatChange() {
    if ( dropdown.options[dropdown.selectedIndex].value > 0 ) {
    location.href = “<?php echo get_option(‘home’);
    ?>/?cat=”+dropdown.options[dropdown.selectedIndex].value;
    }
    }
    dropdown.onchange = onCatChange;
    –></script>

    初心者です。
    [dropdown.selectedIndex]だとカテゴリーのIDを拾ってしまいますが、slugをひろう事はできないものなのでしょうか…。

    もしくは、類似した別の方法があれば教えてください。

15件の返信を表示中 - 1 - 15件目 (全23件中)
  • こんにちは

    ウィジェットのカテゴリリストをドロップダウンでタグ表示する場合でよければ、

    functions.phpに追加してみてください

    <?php
    add_filter( 'widget_categories_dropdown_args','my_categories');
    
    function my_categories( $content ){
        $content['orderby'] = 'count';//カテゴリの件数順に
        $content['order']   = 'DESC';//降順で
        $content['taxonomy'] = 'post_tag';//カテゴリではなくタクソノミを表示する
        $content['show_option_none'] = 'タグを選択';
    
        return $content;
    }
    ?>

    nobita様
    お返事ありがとうございました。
    すいません。
    ウィジェットでは有りませんし、
    頂いたコードを入力しても何の解決にもなりませんでした。

    で、質問です。
    頂いたコードをfunctions.phpに追加して、実際にセレクトメニューをクリックして飛ぶページのテンプレートは何を用意すればいいのですか?
    category.phpならあるんですが全く反映されません。

    [dropdown.selectedIndex]だとカテゴリーのIDを拾ってしまいますが、slugをひろう事はできないものなのでしょうか…。
    に関してはどうでしょうか?

    モデレーター gatespace

    (@gatespace)

    nobitaさんのコードを書いておいて、ドロップダウンで表示したいところに
    the_widget() でカテゴリーウィジェット(WP_Widget_Categories)呼び出せばいいだけじゃ
    http://codex.wordpress.org/Function_Reference/the_widget#Categories_widget

    gatespace様
    すいません。
    もう少し詳細に教えて頂けませんか?
    初心者なものでさっぱりです。

    ごめんなさい ミスです

    add_filter( 'widget_categories_args','my_categories');
    
    function my_categories( $content ){
        $content['orderby'] = 'count';//カテゴリの件数順に
        $content['order']   = 'ASC';//降順で
        $content['taxonomy'] = 'post_tag';//カテゴリではなくタクソノミを表示する
    
        return $content;
    }

    だと動くんですが、

    widget_categories_dropdown_args だと動かないですね、確認不足でした

    wp_dropdown_categoriesは使いませんが、
    http://ja.forums.wordpress.org/topic/1764?replies=3

    でできるようです

    nobita様、度々すいません。
    そのリンク先のコードをどうしたら良いのでしょう?
    そのままで使えるのですか?
    テンプレートファイルはなにを使うのでしょう?

    初心者です。
    ご教授お願い出来ませんでしょうか…。

    mamagoto1031さんが、どんなテーマを使い、どの部分にドロップダウンリストをつけたいのか、わからないので、テンプレートは何を使えとかいうことは、答えることができません。

    お知らせしたリンク先にあるコードは、初心者の方でも最もわかりやすいのではないかと思い、お知らせしました。

    何に躓いているのか、私には、よくわかりません。もう少し具体的に説明してください

    nobita様、ありがとうございます。

    では、
    ・サイドバーに設置したい
    ・taxonomy-カスタムポスト.phpに反映したい
    ・ネットにあったsimplesimpleとかいうテーマを修正して利用
    です。

    なににつまずくというより、コードを自作できないので、
    あるものを置き換える事しかできないのです。

    最初から全部読みましたが、やはり何をしたいのかよくわかりません。もう少し説明していただけますか? WordPress で「タクソノミー」というのは、

    1. カテゴリー
    2. タグ
    3. リンク・カテゴリー
    4. カスタム・タクソノミー

    があります。1~3は WordPress が本来もっている分類方法。4は、ユーザが作らなければ存在しません。nobita さんが示したものは、「タグ」を使ったものです。mamagoto1031さんのいう「タクソノミー」というのはどれですか? これがはっきりしないと、JavaScript の修正ができません。また、

    ウィジェットでは有りませんし、

    ということですが、WordPress では、「サイドバー」に置くものを普通「ウィジェット」と呼びます。mamagoto1031さんのおっしゃる「サイドバー」と「ウィジェット」はどんな違いがありますか?

    テンプレートファイルについては、single-ポストタイプ.php や、taxonomy-タクソノミー.php や、taxonomy-タクソノミー-ターム.php は存在しますが、taxonomy-カスタムポスト.php というテンプレートファイルは存在しない(存在しても使われない)のですが、どれかの間違いですか? それとも、「タクソノミー」ではなくて、実は「カスタムポスト」のことをいいたいのですか?

    さて、最初に戻って、

    <h2><?php _e('Posts by Category'); ?></h2>
    <?php wp_dropdown_categories('show_option_none=Select category'); ?>
    
    <script type="text/javascript">
    var dropdown = document.getElementById("cat");
    function onCatChange() {
        if (dropdown.options[dropdown.selectedIndex].value > 0) {
            location.href = "<?php echo get_option('home');?>/?cat="+dropdown.options[dropdown.selectedIndex].value;
        }
    }
    dropdown.onchange = onCatChange;
    </script>

    このコード自体は、たいへん明確で、何をやりたいか100%理解できます。このコードで、

    slugをひろう事はできないものなのでしょうか…。

    とのことですが、

    dropdown.options[dropdown.selectedIndex].text

    とすると、スラッグを取得することができます。そのかわり、このコードが意図した動作ができなくなります。このコードは、セレクトボックスで選択された値をもとに、

    http://example.com/?cat=1

    というようなアドレスにページ遷移させるものです。このとき、使われるテンプレートは、

    • category-スラッグ.php
    • category-ID.php
    • category.php
    • archive.php
    • index.php

    を上から順番に検索して、最初に見つかったものを使うはずです。カテゴリー・アーカイブですから当然そうなります。そうでないとすると、異常事態です。

    ここで、コードの内容をスラッグを使うように変更すると、アドレスが

    http://example.com/?cat=未分類

    のようになり、該当するテンプレートがないので、index.php が使われ、全ての投稿が表示されると思います。これは、たぶん、このコードを書いた人の意図したものではないし、mamagoto1031さんのやりたいことでもないと思うのですが、スラッグを取得して、何をなさりたいのでしょう?

    kjmtsh様
    ありがとうございます。
    言葉足らず、知識不足で申し訳ありません。
    箇条書きにて返信致します。

    ****************************
    4.カスタム・タクソノミー
    ****************************
    外観→ウィジェットで使うのではなく
    sidebar.phpで使いたい
    ****************************
    taxonomy-タクソノミー-ターム.php の間違いです。
    ****************************
    smallというカスタム投稿タイプを作成
    areaというカスタム分類を作成
    osaka,toukyo,nagoyaというtermを作成
    この状態で、areaのセレクトメニューをクリックし、osaka等のtermの一覧に移動する様にしたいです。
    これがかなうならほかのコードや関数でも全然かまいません。

    よろしくお願いいたします。
    m(__)m

    やっと理解できました。ほぼ最初のコードでいけちゃうんじゃないですかね。投稿タイプは samll 決め打ちでいいのであれば、

    <?php
    wp_dorpdown_categories('show_option_none=Select taxonomy&taxonomy=area');
    ?>
    <script type="text/javascript">
    var dropdown = document.getElementById("cat");
    function onCatChange() {
        if (dropdown.options[dropdown.selectedIndex].value > 0) {
            var taxTerm = dropdown.options[dropdown.selectedIndex].innerHTML;
            location.href = "<?php echo home_url('/');?>?post_type=small&area="+taxTerm;
        }
    }
    dropdown.onchange = onCatChange;
    </script>

    こんな感じです。テンプレートは archive-small.php、archive.php の順で検索されると思います。

    kjmtsh様
    丁寧にありがとうございます。

    ただ頂いたコードを非公開のページに張り付けて動作確認したんですが、
    ページが固まってしまいました。
    なにかコードの記載漏れ等ありますか?

    あと、カスタムポストタイプをもう一つ追加するにはどうすればいいでしょうか?
    例えばsmallとbigというもので。

    へえ、固まるって、めずらしいですね。ちなみに、私の環境ではちゃんと意図どおりに動いていて、下のような設定です。どこか、mamagoto1031さんの環境と違うところがありますか? もし、違うところがあったら列挙してみてください。

    • WordPress: バージョン 3.9.1 ja
    • テーマ: twentyfourteen
    • サーバ: Apache 2.2 with suPHP
    • PHP: バージョン 5.4.4
    • MySQL: バージョン 5.5
    • OS: Debian Linux wheezy

    カスタム投稿とカスタムタクソノミーは下のようにして作成してあります。これも違うところがありますか?

    add_action('init', 'my_custom_type');
    add_action('init', 'my_custom_tax');
    function my_custom_type() {
        $args = array(
            'public' => true,
            'label'  => 'small',
            'taxonomy' => array('category', 'post_tag', 'area'),
            'supoorts' => array('title', 'editor', 'thumnail', 'excerpt', 'custom-field'),
            'rewrite' => array('slug' => 'small'),
            'has_archive' => true
        );
        register_post_type('small', $args);
    }
    function my_custom_tax() {
        register_taxonomy(
            'area',
            'small',
            array(
                'label' => 'area',
                'rewrite' => array('slug' => 'area'),
                'hierarchical' => true
            )
        );
    }

    また、

    http://example.com/?post_type=small
    http://example.com/?area=osaka
    http://example.com/?post_type=small&area=tokyo

    とブラウザのアドレスバーに入力してリターンキーを叩くと、どのような結果になりますか?

    WordPress: バージョン 3.9.1 ja
    テーマ: ネット上のsimplesimpleをもとにした自作
    サーバ: ???レンサバの何処に書いてるかわかりません。
    phpバージョン: 5.4
    MySQL: バージョン ???レンサバの何処に書いてるかわかりません。
    OS: windows7 32bit

    固まるというか頂いたコードをコピペしアップすると、
    サイドバーとフッターが消えてしまいます。

    http://example.com/?post_type=small
    →indexを読み込みます。
    http://example.com/?area=osaka
    →普通に読み込みます。恐らくtaxonomy-area.phpを読み込んでます。
    http://example.com/?post_type=small&area=tokyo
    →普通に読み込みます。恐らくtaxonomy-area.phpを読み込んでます。

    タクソノミー
    register_taxonomy(
    ‘area’, array(‘realestate’, ‘small’),array(
    ‘label’ => ‘エリア’,
    ‘labels’ => array(
    ‘name’ => ‘地域’,
    ‘singular_name’ => ‘地域’,
    ‘search_items’ => ‘地域を検索’,
    ‘popular_items’ => ‘よく使われている地域’,
    ‘all_items’ => ‘すべての地域’,
    ‘parent_item’ => ‘親地域’,
    ‘edit_item’ => ‘地域の編集’,
    ‘update_item’ => ‘更新’,
    ‘add_new_item’ => ‘新規地域を追加’,
    ‘new_item_name’ => ‘新しい地域’,
    ),
    ‘public’ => true,
    ‘show_ui’ => true,
    ‘hierarchical’ => true,
    ‘query_var’ => true,
    ‘yarpp_support’ => true
    )
    );

    ポストタイプ
    register_post_type( ‘small’, /* post-type */
    array(
    ‘labels’ => array(
    ‘name’ => __( ‘無料掲載’ ),
    ‘singular_name’ => __( ‘無料掲載’ )
    ),
    ‘public’ => true,
    ‘menu_position’ =>6,
    ‘name’ => _x(‘無料掲載’, ‘post type general name’),
    ‘singular_name’ => _x(‘無料掲載の記事’, ‘post type singular name’),
    ‘add_new’ => _x(‘新しく無料掲載を書く’, ‘test02’),
    ‘add_new_item’ => __(‘無料掲載を書く’),
    ‘edit_item’ => __(‘無料掲載を編集’),
    ‘new_item’ => __(‘新しい無料掲載’),
    ‘view_item’ => __(‘無料掲載記事を見る’),
    ‘search_items’ => __(‘無料掲載記事を探す’),
    ‘not_found’ => __(‘無料掲載記事はありません’),
    ‘not_found_in_trash’ => __(‘ゴミ箱に無料掲載記事はありません’),
    ‘parent_item_colon’ => ”,
    ‘public’ => true,
    ‘show_ui’ => true,
    ‘exclude_from_search’ => false,
    ‘query_var’ => true,
    can_export => true,
    show_in_nav_menus => true,
    ‘capability_type’ => ‘post’,
    ‘capabilities’ => array( ‘create_posts’ => ‘create_small’ ),
    ‘map_meta_cap’ => true,
    ‘has_archive’ => true,
    ‘hierarchical’ => false,
    ‘menu_position’ => 7,
    ‘yarpp_support’ => true,
    ‘supports’ => array(‘title’,’editor’,’author’,’yarpp’, ‘thumbnail’,
    ‘excerpt’,’comments’,’custom-fields’,’page-attributes’),
    )
    );

    こんな感じです。

15件の返信を表示中 - 1 - 15件目 (全23件中)
  • トピック「wp dropdown categoriesを使って…」には新たに返信することはできません。