2012-02-21 22 views
0

我正在創建一個wordpress博客,每個帖子縮略圖都有小方框。當你點擊一個,它擴展並加載與Ajax的帖子。對於這個功能,我想要加載JUST裏的內容,而不是一堆附加的HTML。然而,爲了提供永久鏈接或人們共享帖子的能力,並直接鏈接到他們從Facebook或任何其他人,我仍然需要一個單一的職位模板,其中包括所有額外的HTML和頁面格式。wordpress template_redirect for two single.php文件允許ajax和非ajax後加載

簡而言之,我希望能夠使用其固定鏈接鏈接到一篇文章,另外我希望能夠使用jquery .load()

下面是我在我的函數文件:

function my_template_redirect() { 
global $wp_query; 
if ('ajax' == $wp_query->query_vars['name']) { 
    $wp_query->is_404 = false; 
    status_header(200); 
    $args = array(
      'p' => $post->ID, 
      'post_type' => $post->post_type 
      ); 
    query_posts($args); 
    the_post(); 
    load_template( TEMPLATEPATH . '/ajax-single.php'); 
    die(); 
    } 
} 

add_action('template_redirect', 'my_template_redirect'); 

所以現在,當我使用它的正常永久鏈接,如(www.page.com/permalink)加載後,它加載了正常的single.php版本,當我加載這樣的帖子時:(www.page.com/permalink/ajax),它顯示了一個使用ajax-single.php作爲頁面模板的精簡版本。問題是,它在ajax版本中一次加載所有文章,而不是僅僅是有問題的文章。我如何確保它只加載我想要的那個?

+1

你是否缺少'global $ post'?我原以爲你得到所有的帖子,因爲你傳遞了NULL'p' ... – 2012-02-21 23:46:38

回答

1

我發現在一篇文章中最好的解決方案稱爲Developing Sites With AJAX: Design Challenges and Common Issues

的原因,這是最好的解決方案是因爲當你做一個AJAX調用加載一個頁面片段,它加載整個頁面,然後再返回該片段。您可以通過使用php來改進此功能,當以下列方式放入頁面時,將只返回服務器請求的數據。第一個選項響應由任何jquery .load()函數加載的頁面,第二個選項以瀏覽器以典型方式加載頁面時作出響應。

<?php if($_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest'){?> 
This is content requested by AJAX. 
<?php }?> 

<?php if($_SERVER['HTTP_X_REQUESTED_WITH']==''){?> 
This is the normal content requested in a browser 
<?php }?> 

下面是一個例子:http://icant.co.uk/articles/things-to-know-about-ajax/header-switching.html

確保檢查出完整的文章,看看它如何能在WordPress的正確應用的更多細節。

1

那麼,你可以嘗試使用「Loading page fragments」選項來解決它在jquery上的加載函數,這樣你只需要找到發佈內容的元素。

+0

工作很好。我使single.php有一個名爲#ajax-stuff的div,並將其加載到主頁上,如下所示: var permLink = $ this.find('a')。attr('href'); $ this.find('。item-content')。load(permLink +'#ajax-stuff'); – 2012-02-22 00:02:19