2016-02-28 25 views
1

我正在開發WP插件,當用戶輸入ID時,將獲得針對該ID的帖子。它在管理方面工作正常。我已經按照this的示例通過AJAX調用獲取數據,但現在我正試圖在前端執行此操作,任何人都可以輸入ID並獲得結果。我已經刪除了我用來在管理端創建頁面的功能。現在,我有3個功能命名爲:如何在前端WP插件中進行AJAX調用

  1. hello_word()
  2. ajax_script()
  3. ajax_handler()

我試着用下面的掛鉤註冊,但它不工作

  • add_action('admin_footer','ajax_script');
  • add_action('wp_ajax_my_action','ajax_script');
  • add_action('wp_ajax_nopriv_my_action','ajax_script');

hello_word()函數包含文本字段和按鈕的代碼。 我從模板文件中調用hello_word()函數,並且它正確顯示,但是當我單擊按鈕時,AJAX不起作用。我發現的問題是,ajax_script()未加載,並且在源代碼中的調試模式下,單擊按鈕時沒有任何內容。

那麼如何從模板文件中調用hello_word()正確加載ajax函數呢?

回答

1

你把事情混淆了一下。

add_action('wp_ajax_my_action', 'your_handler');add_action('wp_ajax_nopriv_my_action', 'your_handler');用於添加函數,該函數將分別處理響應您的ajax呼叫的登錄和來賓用戶。

add_action('wp_footer', 'ajax_script'); - 頁腳的前端操作是wp_footer,只有在您的主題實際調用它時才能使用。但是最好有一個獨立的.js文件,其中包含所有的js文件,而不是直接輸出。
要排隊腳本可以使用下面的代碼

function enqueue_assets() 
{ 
    wp_enqueue_script('your_plugin_js', plugins_url('/my.js', __FILE__), array('jquery'), false, true); //true will put it into the footer 
    wp_localize_script('your_plugin_js', 'your_plugin_ajax_object', array('ajax_url' => admin_url('admin-ajax.php', ((is_ssl()) ? 'https' : 'http')))); // your url for ajax call wil be available as your_plugin_ajax_object.ajax_url 
    //wp_enqueue_style('your_plugin_css', plugins_url('/my.css', __FILE__)); // you can output css here too if you want 
} 
add_action('wp_enqueue_scripts', 'enqueue_assets'); 

你可以叫你hello_world功能你喜歡的地方。

+0

如果我把所有的js代碼放在單獨的文件和排隊腳本中,那麼簡單的調用函數hello_word然後ajax會正常工作,或者我必須做更多的事情? – coder

+0

我想如果我打電話hello_word功能,那麼只有這個功能將被執行而不是其他人,或該文件中的所有代碼將被執行? – coder

+0

@coder'hello_world'應該只返回用戶輸入的內容。如果你告訴我所有3個功能的代碼,我會糾正任何需要糾正的問題,並會解釋你是否不明白某些事情。 –

相關問題