WordPress как на ладони

Передать шорткод хлебных крошек из 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;
	}
0
Serg
1.5 года назад
  • 0

    как я понимаю, используемая вами функция шорткода ориентируется на переменные главного запроса (query_vars).

    При ajax-запросе эти переменные не видны. Поэтому при вызове из функции more_blog_ajax шорткод рисует только обертку.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация