2010-11-07 112 views
3

事先,我確實在wordpress支持論壇上提過這個問題,但他們並不是很有幫助。我希望在這裏有人能夠幫助我。在functions.php中查詢函數?

好的,我是一個完全的新手,當談到Wordpress插件架構時,對我一無所知。我有一個jQuery代碼,用於檢查用戶何時接近頁面底部。但這不是問題。這個jQuery將發送一個AJAX請求,並給出一些關於當用戶接近頁面底部時加載的細節。代碼看起來有點像這樣的時刻:

$("<div>").load('?ajax=y&offset=something', function() { 

    $(".empty-div").append($(this)); 

    setTimeout(function(){ console.log('after', $(document).height()); }, 0); 
    setTimeout(function(){ console.log('after', $(window).height()); }, 0); 


}); 

我的主要問題是,我不知道該怎麼查詢或如何去在functions.php中發送信息到PHP函數。例如,我在此刻這是我的PHP函數(直到它的工作):

function get_posts_page() { 


if(isset($_GET['offset'])) { 
    echo"Hello!"; 
} 

} 

我知道WordPress的有add_action和所有的,但我不知道我會申請作爲行動可以使PHP接收Javascript正在發送的數據。有沒有一個URL可以解析所有功能?感謝您提前提供任何幫助。那麼如何從Javascript中的數據獲取函數function.php中的PHP函數,在我的主題目錄中?

回答

3

我剛剛製作了一段視頻,向您展示如何在WordPress中使用add_action請求。你可以watch it here

這裏是我的javascript

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script> 
<script> 

$('#branding img').click(function() { 

    $.post('<?php bloginfo('siteurl') ?>/wp-admin/admin-ajax.php', { 
    action: 'my_unique_action', 
    offset: 5 
    }, function(data) { 
    $('#content').prepend('<p>' + data + '</p>'); 
    }); 

}); 


</script> 

而且我在functions.php使用PHP的

// Make sure it runs when the user is logged in, 
// and when they are not. 
add_action('wp_ajax_my_unique_action', 'get_offset'); 
add_action('wp_ajax_nopriv_my_unique_action', 'get_offset'); 

function get_offset() { 
    if(isset($_POST['offset'])) { 
    echo 'Your ajax request was successful. Here was your offset: <strong>' . $_POST['offset'] . '</strong>'; 
    } 

    die; 
} 

參考:http://codex.wordpress.org/AJAX_in_Plugins

+0

幹得好,謝謝:) – Johnny 2010-11-08 22:55:35

-1

你正試圖從Javascript調用PHP函數,對嗎?

您需要一些頁面上的某些邏輯,其中調用get_posts_page()。要麼你可以創建一個新的頁面getPostsPage.php?offset=或者你可以把一些邏輯functions.php,像

 
if(isset($_GET['function']) { 
    switch($_GET['function']) { 
     case 'get_posts_page': 
      get_posts_page(); 
    } 
} 

但是,建議前一種方法;您不希望某人能夠修改function參數並以惡意方式訪問deleteAllPosts()

因此:

 
// getPostsPage.php 
require PATH . 'functions.php'; 
get_posts_page(); //checks $_GET['offset'] 

而且記得要優雅地失敗(不公開的錯誤消息),如果「抵消」沒有設置,或什麼的。

+0

見@Baylor Rae的答案,因爲它是做AJAX的標準方式WordPress,滾動你自己需要你處理太多的東西(如安全性),如果你以標準方式來做,它們是自動的。 – MikeSchinkel 2010-11-07 21:35:03