@lorab

Как загрузить данные через Ajax ,вместо PHP для недавно просмотренных товаров?

Подскажите пожалуйста как загрузить данные через Ajax ,вместо PHP? ( о том, что нужно использовать этот способ, мне сообщил разработчик плагина кеширования)

Через шорткод [recently_viewed_products] удается вывести недавно просмотренные товары, но не удается избежать кеширования для содержимого.

add_action( 'template_redirect', 'truemisha_recently_viewed_product_cookie', 20 );
 function truemisha_recently_viewed_product_cookie() {
 	// если находимся не на странице товара, ничего не делаем
	if ( ! is_product() ) {
		return;
	}
 	if ( empty( $_COOKIE[ 'woocommerce_recently_viewed_2' ] ) ) {
		$viewed_products = array();
	} else {
		$viewed_products = (array) explode( '|', $_COOKIE[ 'woocommerce_recently_viewed_2' ] );
	}
 	// добавляем в массив текущий товар
	if ( ! in_array( get_the_ID(), $viewed_products ) ) {
		$viewed_products[] = get_the_ID();
	}
 	// нет смысла хранить там бесконечное количество товаров
	if ( sizeof( $viewed_products ) > 15 ) {
		array_shift( $viewed_products ); // выкидываем первый элемент
	}
  	// устанавливаем в куки
	wc_setcookie( 'woocommerce_recently_viewed_2', join( '|', $viewed_products ) );
 }


add_shortcode( 'recently_viewed_products', 'truemisha_recently_viewed_products' );
 function truemisha_recently_viewed_products() {
 	if( empty( $_COOKIE[ 'woocommerce_recently_viewed_2' ] ) ) {
		$viewed_products = array();
	} else {
		$viewed_products = (array) explode( '|', $_COOKIE[ 'woocommerce_recently_viewed_2' ] );
	}
 	if ( empty( $viewed_products ) ) {
		return;
	}
 	// надо ведь сначала отображать последние просмотренные
	$viewed_products = array_reverse( array_map( 'absint', $viewed_products ) );
 	$title = '<h3>Вы уже смотрели</h3>';
 	$product_ids = join( ",", $viewed_products );
 	return $title . do_shortcode( "[products ids='$product_ids']" );
 }


Источник кода:
Ссылка удалена модератором.
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 1
@kalsc12345
Неизвестный человек.
add_action( 'wp_ajax_my_action', 'truemisha_my_action' );
add_action( 'wp_ajax_nopriv_my_action', 'truemisha_my_action' );

function truemisha_my_action() {
    // Здесь вы можете выполнить любой код PHP для получения данных, которые должны быть возвращены пользователю через Ajax
    $data = array(
        'result' => 'success',
        'message' => 'Данные успешно получены через Ajax',
        'recently_viewed' => truemisha_get_recently_viewed_products()
    );
    wp_send_json_success( $data );
    wp_die();
}


Вот пример
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы