目標は、/ ourcoming-eventsページにアクセスしたときに、イベントの種類や地域でフィルタをかけることができることです。
ドロップダウンからオプションを選択したら、そのページのタイトルをブレッドクラムに表示します。たとえば、パロアルトで自分の近くのイベントを見たい場合は、Northern Californiaを選択します。これがその選択のコードです。
<a class="dropdown-item" href="<?= $full_uri . "?tag=northern-california" ?>">
Northern California
</a>
近くにイベントが見つからない場合は、州全体を選択できます。
<a class="dropdown-item" href="<?= $full_uri . "?tag=california" ?>">
California
</a>
あなたがどこにでも旅行することが可能であったならば、あなたはイベントによって選択することができます(追加のフィルタで)
<a class="dropdown-item" href="<?= $full_uri . "?tag=seminar" ?>">
Seminar
</a>
URLはそのタグが選択された状態で終わるのでis_tag
で解決されることを望んでいました、それはフィルタがあなたを指示するように設定されている方法ですがそれは動作しません(何も表示しません)。 has_tag
だけが動作しますが、問題は各タグ、この場合はregion、state、およびevent typeについてすべての文字列がエコーされることです。これが文字列をエコーするための私のphpです。
if(has_tag( 'northern-california' || 'southern-california' || 'nevada' || 'webinar' || 'seminar' || 'industry-events')) {
echo ' / ' . '<a href="<?php echo $event_tag; ?>"><span class="event-bread">';
}
if(is_tag( 'northern-california' )) {
$event_tag = 'northern-california';
echo "Northern California";
}
if(is_tag( 'northern-california' )) {
$event_tag = 'northern-california';
echo "Northern California";
}
/* other regions omitted for brevity */
if(is_tag( 'seminar' )) {
$event_tag = 'seminar';
echo "Seminars";
}
/* other event types omitted for brevity */
/* i think this below is a sloppy way to close the div */
if(has_tag( 'northern-california' || 'southern-california' || 'nevada' || 'webinar' || 'seminar' || 'industry-events')) {
echo '</span></a>';
}
私のfunctions.php
にこれを追加した答えに基づいて
function event_tag_url() {
add_filter( 'query_vars', function( $eventVars ) {
$eventVars[] = 'eventTag';
return $$eventVars;
}, 10, 1 );
}
それから私のcategory.php
で私はswitch文に変更しました
switch( get_query_var( 'eventTag' ) ) {
case 'california':
$eventTag = 'california';
echo "California";
break;
case 'northern-california':
$eventTag = 'northern-california';
echo "Northern California";
break;
case 'southern-california':
$eventTag = 'southern-california';
echo "Southern California";
break;
case 'seminar':
$eventTag = 'seminar';
echo "Seminars";
break;
default:
$eventTag = 'all';
break;
}
これは何も反響していません。それでも、複数のタグがある場合に起こることの問題を解決するようには思われません。私は解決策がページに設定されているタグを探す必要がありますか?
is_tag()
は、クエリが既存のタグアーカイブページに対するものであるかどうかを返します。これはあなたが使いたいものではありません。
代わりに、 get_query_var()
を使用してください。
get_query_var( 'tag' )
はURLのtag
クエリ変数を調べます。たとえば、あなたのURLが
https://example.com/?tag=this&other=that
その後:
get_query_var( 'tag' )
はthis
を返しますthat
を伴うget_query_var( 'other' )
たくさんのifを使う代わりに、PHP switchコンストラクトを使うことができます。
//* Use switch instead of a long series of ifs
$tag = get_query_var( 'tag' );
switch( $tag ) {
case 'northern-california':
$tag = 'Northern California';
break;
case 'seminar':
$tag = 'Seminar';
break;
//* Etc.
default:
$tag = 'All';
break;
}
//* Do something useful with $tag
しかし、カスタムクエリ変数にget_query_var()
を使用するには、WordPressが関数を使用して取得する変数名の配列にクエリ変数を追加する必要があります。あなたがget_query_var()
を試みる前にロードされている限り、これはあなたのテーマのfunctions.phpまたは単純なプラグインに入れることができます。
get_query_var()
関数で使用される文字列名は、フィルタで使用される名前とまったく同じでなければなりません。クエリ変数としてeventTag
を使用する場合は、それをquery_vars配列に追加し、それをURLのクエリ変数として使用する必要があります。
https://example.com/?eventTag=california
これはあなたのfunctions.phpファイルに入ります
//* Allow custom query var 'tag'
add_filter( 'query_vars', function( $vars ) {
//* Use whatever custom query var you want, but it needs to be exactly the same
$vars[] = 'tag';
$vars[] = 'eventTag';
return $vars;
}, 10, 1 );
あなたがクロージャを使うのが好きでないならば:
add_filter( 'query_vars', 'wpse_261930_query_vars', 10, 1 );
function wpse_261930_query_vars( $vars ) {
$vars[] = 'tag';
return $vars;
}
URLを2つの異なるタグで構成する方法がわかりません。