アクティビティというカスタム投稿タイプページに2つのドロップダウンボックスを作成しようとしています。 1つの分類カテゴリは活動グレードレベル用であり、もう1つは活動タイプ用です。私が今持っているものでは、ドロップボックスの1つを空のままにしておくと、検索は404ページに行きます。私はこの wordpressフォーラムのコードを使用しました そして、これが私の機能フォルダにあるものです。
function get_terms_dropdown_grade_level($taxonomies, $args){
$myterms = get_terms($taxonomies, $args);
$output ="<select name='activities_grade_level'>";
$output .="<option value='#'>Select grade level</option>";
foreach($myterms as $term){
$root_url = get_bloginfo('url');
$term_taxonomy=$term->taxonomy;
$term_slug=$term->slug;
$term_name =$term->name;
$link = $term_slug;
$output .="<option value='".$link."'>".$term_name."</option>";
}
$output .="</select>";
return $output;
}
function get_terms_dropdown_type($taxonomies, $args){
$myterms = get_terms($taxonomies, $args);
$output ="<select name='activities_type'>";
$output .="<option value='#'>Select activity type</option>";
foreach($myterms as $term){
$root_url = get_bloginfo('url');
$term_taxonomy=$term->taxonomy;
$term_slug=$term->slug;
$term_name =$term->name;
$link = $term_slug;
$output .="<option value='".$link."'>".$term_name."</option>";
}
$output .="</select>";
return $output;
}
そしてこれが私が投稿タイプのアーカイブページに持っているものです:
<h2>Filter by</h2>
<form action="<?php bloginfo('url'); ?>" method="get">
<div>
<?php
$taxonomies = array('activities_grade_level');
$args = array('orderby'=>'name','hide_empty'=>false);
$select = get_terms_dropdown_grade_level($taxonomies, $args);
$select = preg_replace("#<select([^>]*)>#", "<select$1 onchange='return this.form.submit()'>", $select);
echo $select;
?>
<?php
$taxonomies = array('activities_type');
$args = array('orderby'=>'name','hide_empty'=>false);
$select = get_terms_dropdown_type($taxonomies, $args);
$select = preg_replace("#<select([^>]*)>#", "<select$1 onchange='return this.form.submit()'>", $select);
echo $select;
?>
<input type="submit" name="submit" value="filter" />
</div>
</form>
それが良い情報であるならば、私もURLを含めます。正しい検索につながる通常のURLは
[...] /?activity_grade_level =小学校&activity_type =エンジニアリング&送信=フィルタ
ドロップボックスの1つが空のURLは
...
正しいカテゴリにつながるURLは次のようになります。
[...]/activity_type/engineering /
または
[...]/activity_grade_level /中学校
このPHPとワードプレス初心者のための何か提案はありますか?
そう、ここでは少し空っぽに見えますが、私は自分自身で問題を考え出しました。トリックは、$ output変数に空の値を入れることでした。
そう
$output .="<option value=''>Select taxonomy #1</option>";
ではない
$output .="<option value='#'>Select taxonomy #1</option>";
これで、2つのドロップダウンメニューを作成し、カスタム分類法を使用して投稿を除外することができます。
これをあなたの functions.php ファイルに貼り付けてください。
function get_terms_dropdown_grade_level($taxonomies, $args){
$myterms = get_terms($taxonomies, $args);
$output ="<select name='MYTAXONOMY#1'>"; //CHANGE ME!
$output .="<option value=''>Select taxonomy #1</option>"; //CHANGE ME TO YOUR LIKING!
foreach($myterms as $term){
$root_url = get_bloginfo('url');
$term_taxonomy=$term->taxonomy;
$term_slug=$term->slug;
$term_name =$term->name;
$link = $term_slug;
$output .="<option value='".$link."'>".$term_name."</option>";
}
$output .="</select>";
return $output;
}
function get_terms_dropdown_type($taxonomies, $args){
$myterms = get_terms($taxonomies, $args);
$output ="<select name='MYTAXONOMY#2'>"; //CHANGE ME!
$output .="<option value=''>Select taxonomy #2</option>"; //CHANGE ME TO YOUR LIKING! foreach($myterms as $term){
$root_url = get_bloginfo('url');
$term_taxonomy=$term->taxonomy;
$term_slug=$term->slug;
$term_name =$term->name;
$link = $term_slug;
$output .="<option value='".$link."'>".$term_name."</option>";
}
$output .="</select>";
return $output;
}
これを ドロップダウンメニューを表示させたいページ に貼り付けます。 (私はarchive-activity.phpのような特別なアーカイブページに私のものを置きます。)
<h3>Filter by:</h3>
<form action="<?php bloginfo('url'); ?>" method="get">
<div>
<?php
$taxonomies = array('MYTAXONOMY#1'); //CHANGE ME!
$args = array('orderby'=>'name','hide_empty'=>false);
$select = get_terms_dropdown_grade_level($taxonomies, $args);
$select = preg_replace("#<select([^>]*)>#", "<select$1 onchange='return this.form.submit()'>", $select);
echo $select;
?>
<?php
$taxonomies = array('MYTAXONOMY#2'); //CHANGE ME!
$args = array('orderby'=>'name','hide_empty'=>false);
$select = get_terms_dropdown_type($taxonomies, $args);
$select = preg_replace("#<select([^>]*)>#", "<select$1 onchange='return this.form.submit()'>", $select);
echo $select;
?>
<input type="submit" name="submit" value="filter" /> <!--CHANGE VALUE TO YOUR LIKING!-->
</div>
</form>
乾杯! :)