WP: カスタム分類タクソノミーのドロップダウンをサイドバー
WordPress WP_DROPDOWN_CATEGORIES カスタム分類タクソノミーをドロップダウンする。
(PHP Code Widgetで追加したウィジェットに書く)
オプションvalueはidは効かないので必ずslugとする。
子のみの問題だがリンクアドレスの日本語がエンコード(パーセント化)されて表示されるので、オプションvalueをデコードしてある。
selectedであるがwp_dropdown_categoriesのパラメータに指定することで実現できるが、オプション値のslugをデコードしているのでうまく働かないので、selectedはJavascriptで処理してある。
<?php
// PHPコード:wp_dropdown_categories
// 指定されたタクソノミーに含まれるタームをドロップダウンリストにして表示。
// (PHP コードを有効にするプラグインを併用すると、ウィジェットの中でも使える。)
// パラメーター設定
$taxonomy = 'object';
$orderby = 'name';
$show_count = 1; // 表示するなら 1、しないなら 0
$pad_counts = 1; // 子孫のカウントも合計するなら 1、しないなら 0
$hierarchical = 1; // 階層表示するなら 1、しないなら 0
$title = '';
$name_suffix = '_dd'; // ドロップダウンメニューのフォーム名の接尾辞、nameの重複を防ぐ目的で。
$show_option_none = '資料を選択'; // 先頭のオプション値
$value_field = 'slug'; // オプションのvalue値
$args = array(
'taxonomy' => $taxonomy,
'orderby' => $orderby,
'show_count' => $show_count,
'pad_counts' => $pad_counts,
'hierarchical' => $hierarchical,
'title_li' => $title,
'name' => $taxonomy.$name_suffix,
'show_option_none' => $show_option_none,
'value_field' => $value_field
);
// HTML記述JavaScript用
$dropdown_id = $taxonomy.$name_suffix;
// selected on JavaScript用
$current_term = get_query_var($taxonomy);
?>
<form id="object-select" class="object-select" action="<?php echo esc_url( home_url( '/' ) ); ?>" method="get">
<?php wp_dropdown_categories( $args ); ?>
</form>
<script type='text/javascript'>
/* <![CDATA[ */
(function() {
var dropdown = document.getElementById( "<?php echo esc_js( $dropdown_id ); ?>" );
dropdown.name = "<?php echo esc_js( $taxonomy ); ?>";
for( var i = 0; i < dropdown.length; i++ ){
if( /%/.test(dropdown.options[i].value) ){
dropdown.options[i].value = decodeURI( dropdown.options[i].value );
}
if( /^<?php echo esc_js( $current_term ); ?>$/.test(dropdown.options[i].value) ){
dropdown.options[i].selected = true;
}
}
function onObjChange() {
if ( !/^-1$/.test(dropdown.options[ dropdown.selectedIndex ].value) ) {
dropdown.parentNode.submit();
}
}
dropdown.onchange = onObjChange;
})();
/* ]]> */
</script>