在WordPress插件中将变量从Ajax传递到PHP

在WordPress插件中将变量从Ajax传递到PHP

问题描述:

I am developing a WordPress plugin and I am trying to pass a variable from ajax to a php file. Both files are inside my plugin folder. The js file is running but when I fire the ajax function, it seems that is not sending a post.

Plugin structure:

  • -plugin folder

    --ajax.js

    --folder/example.php

This is my ajax.js

// using jQuery ajax
// send the text with PHP
$.ajax({
        type: "POST",
        url: "/absoluteurlpluginfolder/folder/example.php",
        data: {
            'action': 'my_action',
            'whatever': 1234
                },
            // dataType: "text",
            success: function(data){
              console.log('Connection success.');
              // console.log(data);
            }
          });

And this is my example.php

add_action( 'wp_ajax_my_action', 'my_action' );

function my_action() {
    global $wpdb; // this is how you get access to the database

    $whatever = intval( $_POST['whatever'] );

    $whatever += 10;

  alert($whatever);

    wp_die(); // this is required to terminate immediately and return a proper response
}

I have two problems:

  1. I cannot see that example.php is receiving anything
  2. How could I use a relative URL to connect with my PHP file? When I try such as 'url: "folder/example.php",' it seems that it starts with "http://localhost/my-wp-project/wp-admin/" and not in my plugin folder, and fails.

我正在开发一个WordPress插件,我试图将一个变量从ajax传递给一个php文件。 这两个文件都在我的插件文件夹中。 js文件正在运行,但是当我触发ajax函数时,似乎没有发送帖子。 p>

插件结构: strong> p>

  • -plugin文件夹 p> \ n

    - ajax.js p>

    - folder / example.php p> li> ul>

    这是 我的ajax.js p>

      //使用jQuery ajax 
     //用PHP发送文本
     $ .ajax({
     type:“POST”,
     url  :“/ absoluteurlpluginfolder / folder / example.php”,
     data:{
    'action':'my_action',
    'whatever':1234 
    },
     // dataType:“text”,
      success:function(data){
     console.log('Connection success。'); 
     // console.log(data); 
    } 
    }); 
      code>  pre> \  n 
     

    这是我的例子.php p>

      add_action('wp_ajax_my_action','my_action'); 
     
    function my_action(){
     global $  WPDB;  //这就是你如何访问数据库
     
     $ whatever = intval($ _POST ['whatever']); 
     
     $无论+ = 10; 
     
    提醒($ whatever); \  n 
     wp_die();  //这需要立即终止并返回正确的响应
    } 
      code>  pre> 
     
     

    我有两个问题: p>

      \ n
    1. 我看不到example.php正在接收任何内容 li>
    2. 我如何使用相对URL连接我的PHP文件? 当我尝试使用'url:'文件夹/ example.php“时,它似乎以” http:// localhost / my-wp-project / wp-admin / ”而不在我的插件文件夹中,并且失败。 li> ol> div>

I think that the main problem was that I need to add "wp_enqueue_script" and "wp_localize_script". However, I am working in the development of a TinyMCE plugin inside WordPress.

That means that although the JS file is already include, it is not working when I add "wp_enqueue_script" and "wp_localize_script". Why? I do not know but the strange thing is that I made it working with another line.

  wp_register_script( 'linked-plugin-script', null);

I have tried with different versions, and the minimum necessary to work is this one above. I can put the URL, version, jquery dependency and false or true. All of them work.

So at the end this is my code and is working. This is the plugin.php

// Include the JS for TinyMCE
function linked_tinymce_plugin( $plugin_array ) {
    $plugin_array['linked'] = plugins_url( '/public/js/tinymce/plugins/linked/plugin.js',__FILE__ );
    return $plugin_array;
}

// Add the button key for address via JS
function linked_tinymce_button( $buttons ) {
    array_push( $buttons, 'linked_button_key' );
    return $buttons;
}


// Enqueue the plugin to manage data via AJAX
add_action( 'admin_enqueue_scripts', 'my_enqueue' );
function my_enqueue() {

  wp_register_script( 'linked-plugin-script', null);

  wp_enqueue_script( 'linked-plugin-script');

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


// Same handler function...
add_action( 'wp_ajax_my_action', 'my_action' );
  function my_action() {
    global $wpdb;

    $whatever = strtoupper($_POST['whatever']);
    echo $whatever;

    wp_die();
}

And this is the plugin of TinyMCE in JavaScript

// JavaScript file for TinyMCE Linked Plugin
//
//
//
( function() {
    tinymce.PluginManager.add( 'linked', function( editor, url ) {

        // Add a button that opens a window
        editor.addButton( 'linked_button_key', {
            // Button name and icon
            text: 'Semantic Notation',
            icon: false,
            // Button fnctionality
            onclick: function() {

              // get raw text to variable content
              var content = tinymce.activeEditor.getContent({format: 'text'});

              // using jQuery ajax
              // send the text to textrazor API with PHP
              $.ajax({
                type: 'POST',
                url: ajax_object.ajax_url,
                data: { 'action': 'my_action',
                          'whatever': ajax_object.whatever = content
                       },
                beforeSend: function() {
                  console.log('before send..');
                 },
                success: function(response){
                  console.log('Success the result is '+response);
                }
              });








            } // onclick function

        } ); // TinyMCE button

    } ); // tinymce.PluginManager

} )(); // function

Have you seen this page? This is the best tutorial. But you have missed a few things:

  1. You should set global js variable with wp_localize_script() function. Like

    wp_localize_script( 'ajax-script', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => 1234 ) );

  2. Replace your url in JS to ajax_object.ajax_url.

IF you wanna work ajax with wp_ajax hooks - you should send all your requests do wp-admin/admin-ajax.php. You can get this url by admin_url('admin-ajax.php');.