2015-03-05 2 views
0

Привет, я пытаюсь добавить в свой магазин функцию, которая, когда кто-то нажимает на продукт, а не перенаправляется на страницу продукта, загружает страницу продукта с помощью ajax на домашней странице, например, в этот сайт (нажмите на один из продуктов): http://www.itsjustyes.com. Это мой jquery:Загрузить шаблонную часть с помощью Ajax в Wordpress

jQuery(document).ready(function($){ 


$('.info_btn').on('click',function(){ 

    var theId = $(this).attr('id'); 


    var div = $('#product-container') 
    $.post('wp-admin/admin-ajax.php',{ 
     action:'my_get_posts',post_id: theId 
    }, function(data){ 
     console.log(data); 
     div.html(data); 
    }) 
    return false; 
}); 

});

Это мой код в functions.php:

//Ajax call to product 

функция my_get_posts_return() {

global $post; 


$post_id = intval(isset($_POST['post_id']) ? $_POST['post_id'] : 0); 

if ($post_id > 0) { 

    $the_query = new WP_query(array('p' => $post_id)); 
    if ($the_query->have_posts()) { 
     while ($the_query->have_posts()) : $the_query->the_post(); 

      wc_get_template_part('content', 'single-product'); 

     endwhile; 
    } else { 
     echo "There were no posts found"; 
    } 
} 


wp_die(); 

}

add_action ('wp_ajax_my_get_posts', 'my_get_posts_return'); add_action ('wp_ajax_nopriv_my_get_posts', 'my_get_posts_return');

Я продолжаю получать, что в цикле не было сообщений, что является странным, потому что я знаю, что отправляю правильный идентификатор сообщения. Кстати, если я попытаюсь получить отдельные части страницы продукта с помощью get_the_title ($ post_id), я получаю ее просто отлично. Только когда я пытаюсь загрузить часть шаблона с помощью цикла, я получаю эту проблему. Любая идея, что я делаю неправильно?

ответ

1

Ваш WP_Query не нашел правильный тип сообщения.

$the_query = new WP_query(array('p' => $post_id)); 

Вышеприведенный запрос не возвращал никаких сообщений вообще. По умолчанию wordpress будет считать, что вы запрашиваете post_type = 'posts', поэтому вы не можете найти сообщение о продукте. Следовательно, вам нужно указать, какой post_type вы ищете. С продуктом WooCommerce вы можете использовать:

$the_query = new WP_query(array('p' => $post_id, 'post_type' => 'product')); 

P.S. Хорошей практикой является использование функции wp_localize_script для регистрации вашего ajaxurl, а не жесткого кодирования в вашем javascript. Вы можете следить за this post для более подробной информации.

Надеюсь, это поможет.

+0

Это работало! Большое спасибо. Я знал, что близко, но полностью застрял. Ты полностью спас меня. Благодарю. –