Перенаправление на Список записей по таксономии при выборе пользователем раскрывающегося списка таксономии?


( Примечание модератора: Первоначальное название было "выпадающая таксономия")

Я хочу добавить раскрывающееся окно , заполненное моими пользовательскими таксономиями, поэтому, когда кто-то выбирает какое-либо значение, оно перенаправляется на соответствующую страницу. Я опробовал этот код, который сработал

<?php wp_dropdown_categories( array( 'taxonomy' => 'name of taxonomy' ) ); ?>

Проблема в том, что я хочу, чтобы страница перенаправлялась без необходимости нажимать какие-либо кнопки. Как я могу это сделать?

Это вопрос был решен, но я хочу внести дальнейшие изменения, я хочу добавить шорткод, чтобы я также мог вызывать раскрывающийся список в свой пост, я пробовал это, но не работает add_shortcode('drop','the_taxonomy_dropdown');

Но когда я называю это в своем посте [drop="location"], это не работает, в чем проблема?

Author: Niraj Chauhan, 2010-12-04

2 answers

Привет@ntechi:

Вот функция, которую я написал и назвал the_taxonomy_dropdown(), чтобы дать вам то, что, как я думаю, вы ищете.

function the_taxonomy_dropdown($taxonomy) {
  $id = "{$taxonomy}-dropdown";
  $js =<<<SCRIPT
<script type="text/javascript">
 jQuery(document).ready(function($){
  $("select#{$id}").change(function(){
    window.location.href = $(this).val();
  });
 });
</script>
SCRIPT;
  echo $js;
  $terms = get_terms($taxonomy);
  echo "<select name=\"{$id}\" id=\"{$id}\">";
  foreach($terms as $term) {
    echo '<option value="';
    echo get_term_link(intval($term->term_id),$taxonomy);
    echo '">' . "{$term->name}</option>";
  }
  echo "</select>";
}

Вы можете поместить the_taxonomy_dropdown() в файл вашей темы functions.php и вызвать его из одного из файлов шаблонов вашей темы следующим образом:

<?php the_taxonomy_dropdown('name of taxonomy'); ?>

Обратите внимание, что я не использовал wp_dropdown_categories(), потому что он устанавливает значения <option> в term_id вместо постоянной ссылки термина. Вам нужна постоянная ссылка, чтобы установить window.location.href на клиентском конце. Если бы мы использовали wp_dropdown_categories(), он бы добавил более сложный; для этого потребовалось бы отправить HTTP-запрос GET с term_id на страницу на сервере, которая затем перенаправлялась бы на постоянную ссылку термина. Но гораздо проще просто создать HTML <select> самостоятельно, как я сделал (и это более удобно, так как для этого не требуется дополнительный HTTP-запрос.)

Конечно, не забудьте запомнить wp_enqueue_script() jQuery в крючке 'init', а также в файле вашей темы functions.php:

add_action('init','jquery_init');
function jquery_init() {
  wp_enqueue_script('jquery');
}
 1
Author: MikeSchinkel, 2010-12-04 08:40:38

Сегодня я снова рассматривал эту проблему, то есть элемент выпадающего списка, возвращаемый wp_dropdown_categories(), устанавливающий значения параметров для идентификатора термина..

Теперь, хотя это делает выпадающий список немного бесполезным для выпадающих списков фильтров или переходных меню, на самом деле можно перенастроить используемый JS, чтобы он работал "как есть"...

Вот базовый пример, основанный на коде, опубликованном выше.

function the_taxonomy_dropdown( $taxonomy = '', $query_var = '' ) {

    if( empty( $taxonomy ) )
        return;

    if( empty( $query_var ) )
        $query_var = $taxonomy;

    $select_id = "{$taxonomy}-dropdown";
    $url_base = get_bloginfo('url') . "/$query_var/";
    ?>

    <script type="text/javascript">
    jQuery(document).ready(function($){
        $("select#<?php echo $select_id; ?>").change(function(){
            var term = this.options[this.selectedIndex].text;
            window.location.href = "<?php echo $url_base; ?>" + term;
        });
    });
    </script>

    <?php
    wp_dropdown_categories( array( 'taxonomy' => $taxonomy, 'id' => $select_id ) );
}

ПРИМЕЧАНИЕ: В этом примере JS предполагается, что вы используете довольно постоянные ссылки.

Если ваша таксономия использует var запроса, который отличается от таксономического слага, который вы передаете в функцию, просто добавьте var запроса в качестве второго параметра..

the_taxonomy_dropdown( 'post_tag', 'tag' );

Пожалуйста, обратите внимание, что это всего лишь пример, показывающий, как обойти проблему с wp_dropdown_categories и пользовательскими таксономиями, внеся изменения в JS.

Также для справки, здесь есть билет, который должен был быть исправлен. http://core.trac.wordpress.org/ticket/13258

 0
Author: t31os, 2010-12-10 14:38:59