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>