网站优化

网站优化

Products

当前位置:首页 > 网站优化 >

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

GG网络技术分享 2025-03-18 16:12 1


问题描述:

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.

图片转代码服务由CSDN问答提供

感谢您的意见,我们尽快改进~

功能建议

我正在开发一个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\');.

标签:

提交需求或反馈

Demand feedback