2015-11-20 7 views
0

Может кто-нибудь мне помочь? Я чувствую себя настолько глупо. Я взял example code from WordPress codex, сделал пример плагина в моей веб-странице, but there no respond...Wordpress plugin pass javascript variable to php

PHP код здесь:

/** 
* Plugin Name: Ada Ajax Test 
* Description: WP Codex based ajax example 
* Version: 1.0.0 
* Author: M. A. Tomas 
* Author URI: http://www.matomas.cz 
* License: GPL2 
*/ 

add_action('admin_enqueue_scripts', 'my_enqueue'); 
function my_enqueue($hook) { 
    if('index.php' != $hook) { 
    // Only applies to dashboard panel 
    return; 
    } 

    wp_enqueue_script('ajax-script', plugins_url('/js/my_query.js', __FILE__), array('jquery')); 

    // in JavaScript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value 
    wp_localize_script('ajax-script', 'ajax_object', 
      array('ajax_url' => admin_url('admin-ajax.php'), 'we_value' => 1234)); 
} 

// Same handler function... 
add_action('wp_ajax_my_action', 'my_action_callback'); 
function my_action_callback() { 
    global $wpdb; 
    $whatever = intval($_POST['whatever']); 
    $whatever += 10; 
    return $whatever; 
    wp_die(); 

} 



// shortcode pro zobrazeni na strance 
add_shortcode('ajax-zkouska', 'my_action_callback'); 

и Javascript код во внешнем файле здесь:

// JavaScript Document 

jQuery(document).ready(function($) { 
    var data = { 
     'action': 'my_action', 
     'whatever': ajax_object.we_value  // We pass php values differently! 
    }; 
    // We can also pass the url value separately from ajaxurl for front end AJAX implementations 
    jQuery.post(ajax_object.ajax_url, data, function(response) { 
     alert('Got this from the server: ' + response); 
    }); 
}); 

Где я ошибаюсь?

ответ

0

У вас есть несколько вещей, смешанных.

Front End

Если вы ориентируетесь на внешний интерфейс, то вам нужно использовать этот крюк:

add_action('wp_enqueue_scripts', 'my_enqueue');

Это позволяет добавлять необходимые сценарии к переднему концу, а не администратор.

Ajax звонки

Все Аякса вызовы выполняются в контексте администратора. Таким образом, вам нужно будет протестировать его и соответственно добавить ajax-крючки.

if (is_admin()) { add_action('wp_ajax_my_frontend_action', 'my_frontend_action_callback'); add_action('wp_ajax_nopriv_my_frontend_action', 'my_frontend_action_callback'); add_action('wp_ajax_my_backend_action', 'my_backend_action_callback'); // Add other back-end action hooks here } else { // Add non-Ajax front-end action hooks here }

Нет Priv

no_priv крючок предназначен для пользователей, которые не вошли в систему. Добавьте его, если это ваше намерение.

+0

Спасибо, первая точка, которую я понимаю, но вторая - как я могу реализовать это в коде? – Adko

+0

Все вызовы ajax обрабатываются в бэкэнде, как если бы администратор выполнял работу. Вот что это значит. Поэтому, когда вызов ajax входит в функцию is_admin, возвращается true. Тестирование выполняется для разделения вызовов ajax от внешних интерфейсов. Вы также можете отделить его, добавив DOING_AJAX в условие if. – Scriptonomy