2015-07-10 53 views
0

只執行PHP函數時對於我的wordpress網站的PHP文件中的一個,我有以下代碼:點擊(WordPress的)

<div class="tabs"> 
     <a href="#tab1" id="items_id">Items</a> 
    </div> 
    <div class="section" id="tab1"> 
    <?php get_template_part('page/tab1'); ?>    
    </div> 

所以,它會調用tab1.php文件到div id="tab1"部分。

但是,我想使get_template_part僅在單擊Items選項卡時執行或調用。

什麼是jQuery調用或執行get_template_part函數?

編輯:

所以,我想實現類似於阿賈克斯。由於在點擊"Items"選項卡之前get_template_part函數將不會被調用,因此瀏覽器不必調用不必要的文件並減慢頁面的速度。

讓我知道如果你認爲這是做到這一點的最好方法。

謝謝!

+2

jQuery AJAX:http://api.jquery.com/jquery.ajax/ – mjohns

回答

3

雖然背後已經被拉斐爾在他的回答中所示的想法,我進行干預,以添加一些細節

與Wordpress一起使用AJAX的最佳方式是使用其內置的方式來處理它,並通過發送請求到wp-admin/admin-ajax.php(我知道文件名的「admin」部分有點誤導。但前端(觀看端)以及管理員的所有請求都可以在admin-ajax.php中處理,具有很多好處,特別是對於安全性。而對於將被執行的服務器端代碼php,它應該放置在functions.php

jQuery代碼看起來是這樣的:在你的主題的functions.php(你的插件文件或直接)

$(document).ready(function() { 
     $('.tabs a').click(function(e) { 
      e.preventDefault(); 

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


      $.ajax({ 
       type: "GET", 
       url: "wp-admin/admin-ajax.php", 
       dataType: 'html', 
       data: ({ action: 'yourFunction', id: tab_id}), 
       success: function(data){ 
          $('#tab'+tab_id).html(data); 
       }, 
       error: function(data) 
       { 
       alert("Error!"); 
       return false; 
       } 

      }); 

    }); 
}); 

,添加:

add_action('wp_ajax_yourFunction', 'yourFunction'); 
add_action('wp_ajax_nopriv_yourFunction', 'yourFunction'); 

,並在同一個文件yourFunction回調定義功能如下:

function yourFunction() { 

// get id 
    // your php code 

    die(); 

    } 

對於j avascript部分,看看ajax()及其簡寫get()。而對於在Wordpress中使用AJAX的最佳實踐,網上有很多教程(我會回來給出一個)。祝你好運

編輯:

因爲它是由卡爾mentionned,您可以使用​​代替ajax(),應當注意的是,​​僅僅是$.ajax()的包裝。它增加了一些功能,使您可以定義文檔中要插入返回數據的位置。因此,只有當調用只會導致HTML時才真正可用。它被稱爲與另一個稍有不同,因爲它是綁定到特定jQuery包裝的DOM元素的方法。因此,可以這樣做:$('#divWantingContent').load(...),其內部呼叫.ajax()

但我的原始答案是關於如何組織PHP代碼尊重Wordpress best practices

+0

謝謝。我會試試這件事,然後回覆你。 =) –

+0

感謝您的回答!一次編輯,您需要在您的url上添加一個斜槓,以便請求可以從每個頁面正確播放。 'url:「/wp-admin/admin-ajax.php」' – vaskort

2

你真的不能因爲瀏覽器看到的頁面時從JavaScript調用PHP函數,PHP的已經執行(或你的情況,不執行)

爲你做的唯一途徑你想要的是將PHP函數關閉到一個單獨的腳本中,然後使用AJAX調用該文件。讓腳本回顯HTML,然後將HTML插入到AJAX回調中的tab1 div中。

+0

謝謝你的回覆。你能告訴我或給我一個例子嗎?我不完全理解如何實現這一點。 (我想我理解它爲什麼不起作用,但我不是100%確定如何實現你的建議)。 –

+0

其他兩個答案實際上都有很好的代碼示例。我不會添加更多的噪音,並簡單地推薦這兩個:) –

2

我認爲最簡單的解決方案是使用jQuery load()函數。這是實現你所描述的最簡單的方法。唯一的問題是,當有人點擊的標題,會有一個延遲,以獲得子項目,因爲他們還不存在(這將是在那裏你延遲加載任何情況下的情況下

HTML

<div class="tabs"> 
     <a href="#tab1" id="items_id">Items</a> 
    </div> 
    <div class="section" id="tab1"></div> 

JS

$(function() { 
    //wait for the page to finish loading 
    $('#items_id').click (function (e){ 
    //watch for the items header to be clicked 
    e.preventDefault(); 
    //prevent it from opening a link 
    $('#tab1').load('tab1.php'); 
    //load the tab1.php file, or whatever file INTO the div 
    }); 
})