web-dev-qa-db-ja.com

別のカスタム分類法から選択した項目に基づいてWordPressカスタム分類法項目を表示する

私が扱っている問題について説明させてください。

2つのカスタム分類法があります。 1つは "thestate"という名前で、もう1つは "thetown"という名前です。

" thestate "には、アメリカのすべての州がリストされています。
" thetown "にはアメリカの主要な町があります。

分類ごとに、ドロップダウンに表示されている項目があります。

あなたは私がこれをどこへ向かっているのか理解していますか? :D分類 "thestate"で選択されている状態に基づいて "thetown"にアイテムを表示できるようにする必要があります。

たとえば、 ユーザーが「thestate」という分類法で「Michigan」を選択すると、ページは自動的に更新され、次のドロップダウンの「thetown」という分類法では「都市のみ」になります。デトロイト」、「グランドラピッズ」、「ウォーレン」。

その後、ユーザーが考えを変えて「Texas」を選択すると、ページは自動的に更新され、次のドロップダウンで「thetown」という分類法で、都市は「Houston」、「San Antonio」、「Dallas」のみになります。

私の説明が理にかなっていることを願っています!私がこれを成し遂げることができる論理を考えることができますか?

よろしく、ガブリエラ

5
Gabriela

どうして町に各州の子用語を作ってみませんか?分類法は次のようになります。

MikeSchinkelの詳細なqおよび階層的分類法に関するaを参照してください

enter image description here

選択した状態でページを更新するよりも洗練された解決策は、ajaxと get_term_children 関数、または以下に概説するカスタム$ wpdbクエリを使用して "thetown"子用語をロードすることです。

JQueryを使って選択した状態をバックエンドPHP関数に渡します。この関数は、子用語の配列をループ処理して2番目のドロップダウンを構築します。

これはカスタム$ wpdbクエリを使った簡単な例です:

PHPバックエンド機能:

add_action( 'wp_ajax_nopriv_get_child', 'ajax_get_children' );

function ajax_get_children() {
        global $wpdb;
        $parent = $_POST['parent'];
        $child_string = "";
        $results = $wpdb->get_results ( "SELECT t.term_id, t.name FROM $wpdb->term_taxonomy tt, $wpdb->terms t, $wpdb->term_taxonomy tt2 WHERE tt.parent = $parent AND tt.taxonomy = 'category' AND t.term_id = tt.term_id AND tt2.parent = tt.term_id GROUP BY t.term_id, t.name HAVING COUNT(*) > 0 ORDER BY t.term_order ASC" );
        foreach ( $results as $row ) {
            $child_string = $child_string . "<option value='$row->term_id'>$row->name</option>";
        }
        echo $child_string;

        die(1);

    }

jQuery:

jQuery(document).ready(function() {

    jQuery("#div-id-of-dropdown").select(function(){

        jQuery( "#loading-animation").show();
        var termID = jQuery("#parent-term :selected").val();


        jQuery.ajax({
            type: 'POST',
            url: ajaxurl,
            data: {"action": "get_child", parent: termID },
            success: function(response) {
                jQuery("#empty-div-to-load-child-terms").html(response);
                jQuery("#loading-animation").hide();
                return false;

            }
        });
    });
});

上記のコードと一致するようにHTMLを変更する必要があります。状態が選択されると、WordPressは子の「町」をロードします

編集する

JQueryのajaxurl変数が定義されないことを言及するのを忘れていました。 プラグインでAJAXを使用する を読んで、他の有用な情報とともにメソッドを入手してください。

4
Chris_O