Задать вопрос
@MyQuestion
junior-middle fullstack

Как в wordpress получить урл или id поста из function.php, если старица обрабатывается ajax?

Добрый день!

У меня есть в post type карточки, с фильтром. Тянутся с помощью ajax, фильтруется get запросом.
Пришла задача, нужно несколько фильтров перевести в нормальные урлы, для сео, говорят, важно. Я создал отдельную страницу, подключил шаблон, хочу передать параметр через доп. поля новой страницы и отсортировать в цикле результат.

В шаблоне у меня так:
<script>
  let baseFilterData = JSON.parse('<?= json_encode($filtersData); ?>');
  let ajaxFilterUrl = '<?= admin_url('admin-ajax.php?action=filter_apartments&'); ?>';
  let ajaxUrl = '<?= admin_url('admin-ajax.php'); ?>';
</script>
<div class="load" data-obj-city-str="" data-max-page="" data-ajax-url="" data-current-page="1">
/* контейнер куда генерятся карточки */
</div>


В function.php так:
$my_posts = new WP_Query($args);
  $total_posts = $my_posts->found_posts;
  $max_pages = $my_posts->max_num_pages;

  if ($my_posts->have_posts()) {

    ob_start();

    while ($my_posts->have_posts()) {
      $my_posts->the_post();

      get_template_part('template-parts/apart-list-item', null, []);
    }
    $content = ob_get_clean();
    wp_send_json_success(['content' => $content, 'total_posts' => $total_posts, 'max_pages' => $max_pages, 'get' => $rooms, ]);
  } else {
    wp_send_json_success(['content' => '<p class="not-found">По заданным параметрам ничего нет.<br>Измените параметры и&nbsp;попробуйте снова</p>', 'total_posts' => 0, 'get' => $rooms]);
  }


Дальше идёт шаблон самой карточки:
template-parts/apart-list-item

Проблема в том, что я хоть и получаю все товары без фильтра, но не в function.php, не в шаблоне карточки, никак не могу получить id страницы, на которой я сейчас нахожусь, что бы вызвать поля этой страницы и отсортировать результат цикла. Я пытался получить id по урлу но любые способы определения урла страницы отдают какую-то ерунду, даже самый железный способ
$_SERVER['REQUEST_URI']
отдаёт мне
/wp-admin/admin-ajax.php?action=filter_


Я пробовал через массив пост передать данные, записал значение в шаблоне страницы $_POST['id'] = '10';
посмотрел в массив в шаблоне карточки - пусто.

Как передать ID? Или хотя бы как мне получить нормальный урл страницы в function.php?
  • Вопрос задан
  • 66 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
<script>
  let baseFilterData = JSON.parse('<?= json_encode($filtersData); ?>');
  let ajaxFilterUrl = '<?= admin_url('admin-ajax.php?action=filter_apartments&'); ?>';
  let ajaxUrl = '<?= admin_url('admin-ajax.php'); ?>';
</script>
<div class="load" data-obj-city-str="" data-max-page="" data-ajax-url="" data-current-page="1">
/* контейнер куда генерятся карточки */
</div>


Тут не ясно что в $filtersData, зачем два admin-ajax.php и почему все data-атрибуты пустые. Js обработчика в вашем вопросе вообще нет

У меня так работает, в html формируются параметры текущего запроса из $wp_query->query

global $wp_query;

// Parameters for the ajax handler.
$ajax_localize = array(
	'url'   => admin_url( 'admin-ajax.php' ),
	'query' => $wp_query->query,
	'lang'  => determine_locale(),
	'nonce' => wp_create_nonce( 'ajax-nonce' ),
);

$ajax_localize = apply_filters( 'ajax_localize_params', $ajax_localize );

wp_localize_script( 'jquery', 'ajax_obj', $ajax_localize );


Это шаблон клика в js, данные подтягиваются из ajax_obj.query, их же можно отредактировать на фильтре ajax_localize_params в php

$( '#primary' ).on( 'click', '.loadmore', function( e ) {

	$.ajax( {
		url: ajax_obj.url, // Ajax url from function ajax_localize_params().
		type:'POST',
		data: {
			'action': 'loadmore_handler', // Handler name.
			'query': ajax_obj.query, // Query from function ajax_localize_params().
		},
		beforeSend: function() { },
		complete: function() { },
		success:function( response ) { }
	} );

	e.preventDefault();
} );
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы