Передать шорткод хлебных крошек из functions.php на страницу
Подскажите, пожалуйста, как передать шорткод хлебных крошек в динамически создаваемый блок, гугл не помог решить проблему..
У меня есть блок main__items в нем выводятся посты из определенной категории, в каждом посте есть шорткод breadcrumbs:
<div class="main__items"> <?php $my_posts = get_posts( array( 'numberposts' => 4, 'category_name' => 'test', 'orderby' => 'date', 'order' => 'DESC', 'post_type' => 'post', 'suppress_filters' => true, ) ); foreach( $my_posts as $post ){ setup_postdata( $post ); ?> <div class="main__item"> <?php echo do_shortcode("[breadcrumb]"); ?> <a href="<?php echo get_permalink(); ?>" class="main__img"> <?php the_post_thumbnail(); ?> </a> </div> <?php } wp_reset_postdata(); ?> </div>
Также на этой странице есть кнопка "loadmore", которая подгружает посты при нажатии, эти посты создаются в functions.php:
<?php add_action('wp_ajax_more_blog_ajax', 'more_blog_ajax'); add_action('wp_ajax_nopriv_more_blog_ajax', 'more_blog_ajax'); function more_blog_ajax() { $page = (isset($_POST['page'])) ? $_POST['page'] : 1; header("Content-Type: text/html"); $params = array( 'category_name' => 'test', 'post_status' => array('publish'), 'orderby' => 'date', 'order' => 'DESC', 'post_type' => 'post', 'suppress_filters' => true, 'posts_per_page' => 2, 'paged' => $page ); $loop = new WP_Query($params); $items = array(); if ($loop -> have_posts()) : while ($loop -> have_posts()) : $loop -> the_post(); $out = ''; $out .= '<div class="main__item"><a href="'. get_permalink() .'" class="main__img">'. get_the_post_thumbnail() .'</a></div>'; $items[] = $out; endwhile; endif; wp_reset_postdata(); echo json_encode(array('count' => get_category(get_the_category(get_the_ID())[0]->term_id)->category_count, 'items' => $items)); wp_die(); } ?>
Суть вопроса: Как подставить шорткод в эту функцию, чтобы в вновь созданный пост добавлялись хлебные крошки? Если передаю do_shortcode, то выводится только контейнер крошек без самих элементов, я так понимаю из-за того что шорткод вызывается в functions.php а не на странице.. Есть ли какой - то способ добавить таким образом хлебные крошки?
На всякий случай, js функция которая принимает данные в шаблоне:
var page = 2; function load_more() { page++; $.ajax({ url: ajax_params.url, method: 'post', dataType: 'json', data: {action: 'more_blog_ajax', page: page}, success: function(data) { var items = data.items.join(""); document.querySelector('.main__items').insertAdjacentHTML('beforeEnd', items); if(data.count - page * 0 <= 0) { document.querySelector(".btn_loadmore").style.display = "none"; } } }); return false; }
как я понимаю, используемая вами функция шорткода ориентируется на переменные главного запроса (query_vars).
При ajax-запросе эти переменные не видны. Поэтому при вызове из функции more_blog_ajax шорткод рисует только обертку.