Во время написания прошлой статьи про аккордеон меню я наткнулся на функцию wp_dropdown_categories(). Она показалась мне очень интересной, но для реализации аккордеона мне не подходила. И вот в новой статье я решил рассказать о том, как создать выпадающие меню рубрик и вызывать несколько статей по ajax.
Данная функция возвращает html код выпадающего списка с категориями. Подробно вы можете прочитать про эту функции и её параметры вы можете прочитать в кодексе, я остановлюсь лишь на некоторых параметрах.
Строка содержащая id рубрик, разделённых через запятую, которые нужно исключить из вывода, например, 1 («Без рубрики»).
Выводить как дерево или как отдельными элементами. Я выбрал сплошным списком (0)
Name – это то значение атрибута name у select, id и class соответственно. По id мы будем ловить события в js. Class form-control я добавлю чтобы выглядело по bootstrap.
У меня получился следующий код
$args = array( 'show_option_all' => '', 'show_option_none' => '', 'orderby' => 'ID', 'order' => 'ASC', 'show_last_update' => 0, 'show_count' => 0, 'hide_empty' => 1, 'child_of' => 0, 'exclude' => '1', 'echo' => 1, 'selected' => 0, 'hierarchical' => 0, 'name' => 'cat', 'id' => 'name', 'class' => 'form-control', 'depth' => 0, 'tab_index' => 0, 'taxonomy' => 'category', 'hide_if_empty' => false, 'value_field' => 'term_id', 'required' => false, ); wp_dropdown_categories($args);
Функцию с параметрами можно вывести в шаблоне страницы или обернуть в шорткод и вызывать, например, на странице записи.
Вот код для вызова функции по AJAX
<script> jQuery('document').ready(function(){ jQuery('#name').on('change', function(){ var e = jQuery(this).val(); console.log('Не смотри сюда'); jQuery.post('/wp-admin/admin-ajax.php', {'action':'pcht_posts', 'param':e}, function(response){ jQuery('.access').html(response); }); }); } ); </script>
Обратите внимание что для вывода контента у вас на странице должен быть блок с классом .access, ну или поменяйте его на тот класс или id вам нужно в js коде. Если вы хотите больше разобраться в ajax в wordpess или в mvc прочитайте в этих статьях ajax wp и ajax mvc php
// Получение постов по ajax pc-health.me add_action('wp_ajax_pcht_posts', 'pcht_posts'); add_action('wp_ajax_nopriv_pcht_posts', 'pcht_posts'); function pcht_posts($postID){ $catID=intval( $_POST['param'] ); ?> <?php $args = array( 'cat'=>$catID, 'showposts'=>'2' ); $recent = new WP_Query($args); while ( $recent->have_posts() ) : $recent->the_post();?> <div class="modal-header"> <?php the_title( '<h2 class="modal-title text-center">', '</h2>' ); ?> </div> <div class="row loader"> <div class="col-lg-12" style="padding: 0 30px;"> <?php //the_content(); the_excerpt(); ?> </div> <a href="<?php echo get_permalink(); ?>">Читать полностью</a> </div> <?php endwhile; ?> <?php wp_die(); }
Это довольно простой код, подобный я уже рассматривал в статье про wp ajax