2015-07-02 3 views
1

Я попытался сделать вызов ajax в моем цикле wordpress, в основном я хотел бы загрузить содержимое сообщения на домашней странице в div после нажатия на заголовок. вызов ajax кажется сработавшим, но у меня есть проблема с загрузкой всей страницы, и я бы хотел загрузить только содержимое div с определенным идентификатором.wordpress ajax call single post

это мой код: index.php

<?php if (have_posts()) : while (have_posts()) : the_post(); ?> 
    <a class="post-link" rel="<?php the_ID(); ?>" href="<?php the_permalink(); ?>"> 
     <?php the_title(); ?> 
    </a> 
    <?php endwhile; endif; ?> 
<div id="single-post-container"></div> 

это single.php

<?php $post = get_post($_POST['id']); ?> 
    <div id="single-post post-<?php the_ID(); ?>"> 
    <?php while (have_posts()) : the_post(); ?> 
       <?php the_title();?> 
       <?php the_content();?> 
    <?php endwhile;?> 
    </div> 

и это JS

jQuery(document).ready(function(){ 

     jQuery.ajaxSetup({cache:false}); 
     jQuery(".post-link").click(function(){ 
      var post_link = jQuery(this).attr("href"); 

      jQuery("#single-post-container").html("content loading"); 
      jQuery("#single-post-container").load(post_link); 
     return false; 
     }); 

    }); 

я пытался добавить идентификатор # single post после post_link вот так:

jQuery("#single-post-container").load(post_link #single-post); 

, но когда я запускаю gulp, у меня есть ошибка, которая блокирует меня. Как я могу достичь этой области?

Кто-то может дать мне помощь или предложение?

+0

что POST_LINK? Каков фактический URL-адрес вашего вызова AJAX? Если вы просто вызываете single.php, первое, что делает, это call header() - следовательно, вы можете получить всю страницу. Но я, возможно, ошибаюсь. –

+0

post_link - это URL сообщения, которое я нажимаю. (например, http: // localhost: 8888/blog/title-post /). attr («href») ссылки – mattia

+0

Итак, было бы то же самое, если бы вы вошли в адресную строку в своем браузере, вы увидите всю страницу - сообщение и заголовки и т. д.? –

ответ

1

Я думаю это может быть ответ, но только если я правильно понял проблему:

Что такое POST_LINK? Каков фактический URL-адрес вашего вызова AJAX? Если вы просто вызываете single.php, первое, что делает, это call header() - следовательно, вы можете получить всю страницу. Глядя на ваш index.php, я думаю, что это может быть то, что происходит.

Если это так. Вам нужно посмотреть, как делать вызовы AJAX в WordPress. Вы должны добавить обратный вызов AJAX с чем-то вроде add_action ('wp_ajax_my_action', mycallback). Тогда ваш обратный вызов может получить только одно сообщение с get_post(). Фактический URL-адрес вашего вызова AJAX должен быть вызван:

yourdomain/wp-admin/admin-ajax.php? Action = my_action & post_id = THEPOSTID. Вы можете использовать admin_url(), чтобы помочь вам создать правильный URL-адрес.

Возможно, вам понадобится ввести THEPOSTID в свой JavaScript. Использование wp_localize_script. Или вы можете добавить его как атрибут в index.php и получить его в своем JavaScript.

Тогда ваш обратный вызов - mycallback() - может использовать get_post(), чтобы получить только сообщение и вернуть его без всякого пуха страницы. Например:

function mycallback() 
{ 

    $postId = $_GET['post_id']; 
    $postRow = get_post($postId); 
    echo $postRow->post_content; 
    wp_die(); 
} 

Возможно, вы ищете несколько примеров того, как делать AJAX с помощью WordPress? например http://wptheming.com/2013/07/simple-ajax-example/

ОБНОВЛЕНИЕ:

добавлен wp_die(); в конце обратного вызова AJAX. Вам нужно сделать это, чтобы WordPress не выплескивал много страниц bumf. На самом деле это может быть та часть, которая отсутствует в вашем single.php. Пожалуй, лучше всего сделать это, используя admin-ajax.php.

0

, если это может помочь кому-то, я решил с этим кодом

//take the permalink of the single post 
var post_permalink = locations[i].post_url + " #single-post"; 

// load post in the div 
jQuery("#single-post-container").html("content loading"); 
jQuery('#single-post-container').load(post_permalink); 

спасибо вам все равно