私はこの問題の解決策についてグーグルしても何も見つけませんでした:私はカスタムポストタイプ(レストラン)とその分類法(「都市」と「料理」)からの投稿をいくつか持っています。レストランの投稿を作成するときはいつでも、好きなだけ「料理」の用語を設定できますが、「都市」は単一選択です。私はまた、分類用語からフィルタリングすることで 'レストラン'投稿から検索できるHTMLドロップダウンを使用してカスタム検索を行いました。
検索はうまく機能しますが、私が本当に望んでいるのは、選択された最初の分類法(都市)に基づいて何らかの関係を持つ用語のみを2番目の分類法(料理)に取り込むことです。最初のドロップダウンで、誰かが「ニューヨーク」の都市を選択した場合、2番目のドロップダウンでは、レストランの投稿に「ニューヨーク」の都市用語と関係がある料理用語のみを表示する必要があります。 「ブラジル」料理と「ニューヨーク」市登録の投稿がない場合は、「ブラジル」という用語は2番目のドロップダウンに表示されてはいけません。もちろん、料理のドロップダウンに重複した用語を表示する必要はありません。
それは可能ですか?前もって感謝します!
これが答えの一部です...あなたが探している用語を問い合わせる方法。しかし、それはあなたがそれぞれの選択について再クエリするためにいくらかのajaxが必要であるように思えます。
市と料理は動的ですが、基本的にユーザーが市を選択したときにそのデータが$city
変数に入力されます。
他の誰かがajaxの部分に慣れる必要があるでしょう。
<?php
$city = array( 'dallas' );
$cuisine = array( 'italian', 'mexican', 'french );
$args = array(
'post_type' => 'restaurant',
'posts_per_page' => -1,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'city',
'field' => 'slug',
'terms' => $city
),
array(
'taxonomy' => 'cuisine',
'field' => 'slug',
'terms' => $cuisine
)
)
);
?>
返信が遅くなってすみませんが、ご協力ありがとうございました。
wordpress.orgフォーラムのvtxyzzyは、クエリー部分を手助けしてくれました、ajaxとphpは自分でやってくれました。これが、最終的なコードがfunctions.phpになった方法です。
function restaurant_search( $taxonomy ) {
?>
<script type="text/javascript">
jQuery(document).ready(function() {
$('#cidade').change(function(){
var cidade=jQuery('#cidade').val();
$.ajax({
url:"<?php bloginfo('wpurl'); ?>/wp-admin/admin-ajax.php",
type:'POST',
data:'action=category_select_action&name=' + cidade,
success:function(results)
{
$("#cozinha").html(results);
}
});
});
});
</script>
<form action="<?php echo home_url('/'); ?>" role="search" method="get">
<?php // First dropdown
$term_selected_cidade = get_terms('cidade');
echo '<select id="cidade" name="cidade">';
echo '<option disabled="disabled" selected="selected">Cidade</option>';
foreach ($term_selected_cidade as $term) {
echo '<option id=' . $term->term_id . ' value=' . $term->slug . '>' . $term->name . '</option>';
}
echo '</select>';
?>
<!-- Second Dropdown -->
<select name="cozinha" id="cozinha" >
<option>Escolha uma cidade</option>
</select>
<input type="submit" value="buscar" />
</form>
<?php }
function implement_ajax() {
// Populates the second dropdown with cuisine terms
global $wpdb;
$cozinha_term = $_POST['name'];
$query = "
SELECT DISTINCT $wpdb->terms.name, $wpdb->terms.slug
FROM $wpdb->terms
INNER JOIN $wpdb->term_taxonomy ON $wpdb->terms.term_id=$wpdb->term_taxonomy.term_id
INNER JOIN $wpdb->term_relationships ON $wpdb->term_relationships.term_taxonomy_id=$wpdb->term_taxonomy.term_taxonomy_id
LEFT JOIN $wpdb->posts ON $wpdb->posts.ID=$wpdb->term_relationships.object_id
WHERE $wpdb->term_taxonomy.taxonomy='cozinha' AND $wpdb->posts.ID IN (
SELECT $wpdb->posts.ID
FROM $wpdb->terms
INNER JOIN $wpdb->term_taxonomy ON $wpdb->terms.term_id=$wpdb->term_taxonomy.term_id
INNER JOIN $wpdb->term_relationships ON $wpdb->term_relationships.term_taxonomy_id=$wpdb->term_taxonomy.term_taxonomy_id
LEFT JOIN $wpdb->posts ON $wpdb->posts.ID=$wpdb->term_relationships.object_id
WHERE $wpdb->term_taxonomy.taxonomy='cidade' AND $wpdb->terms.slug='$cozinha_term')";
$object = $wpdb->get_results($query);
$cuisine_terms = array();
for ($i = 0; $i < count($object); $i++) {
$cuisine_terms[] = get_object_vars($object[$i]);
}
echo '<select id="cozinha">' . '<option disabled="disabled" selected="selected">Cozinha</option>';
foreach ($cuisine_terms as $term) {
echo '<option value=' . $term['slug'] . '>' . $term['name'] . '</option>';
}
echo '</select>';
}
add_action('wp_ajax_category_select_action', 'implement_ajax');
add_action('wp_ajax_nopriv_category_select_action', 'implement_ajax');