0

Q: What is the correct way to call a PHP Function with multiple parameters from the AJAX Handler? Q: Am I calling the php function correctly? Q: Is there an easier way to do this?


Page Element The user clicks a button.

Action: The click will call php code to connect to an external server using the following params:

  1. User Name 2. IP Address 3. Port 4. Public Key 5. Service

Purpose: Send an vote string (from host A) to an external Gaming server (host B).
I do not need to update any WordPress content. Note: I own both of these servers.

WordPress Version: 5.4.1 PHP Version on Server 7.3

Intially, I had my custom php code in a separate file "/wp-contents/plugins/my-plugin/votifier.php" I was trying to call my functions in this file from the AJAX Handler.

  1. MyPlugin.php
  2. sendvote.js
  3. votifier.php (I ended up moving the code from here into 1.MyPlugin.php above)

I made sure the custom plugin is activated.

I have WordPress in Debug mode. i.e. Debug mode is true.

The Button

<div id="frm_field_61_container">
<button type="button">Try it</button>
</div>

WordPress JQuery with AJAX (sendvote.js)

NOTE: This code is in a separate file in my plugins folder. Filename sendvote.js

jQuery(document).ready( function($) {
 $("#frm_field_61_container").click(function(){
       // e.preventDefault();  // used to cancel forms submit action.


    jQuery.ajax({

        url : myAjax.ajaxurl,

        type : 'POST',

        dataType : 'json',

        data : {
             'action'   :'my_vote_count'
            ,'username' :$.trim($('#field_9gma9').val())
            ,'key'      :$.trim($('#field_yjr62').val())
            ,'ip'       :$.trim($('#field_973sr').val())
            ,'port'     :$.trim($('#field_q9ajo').val())
            ,'service'  :'Votifier'
            ,'nonce'    :'votifier_nonce_key'
        },

        success: function(data) {

                    console.log(data);
                },

        error: function(errorThrown){
                    console.log(errorThrown);
                }

      });   
   });
});

/* ===== WP_ENQUEUE SCRIPTS ==== */ NOTE: This code is in a separate file with the file-name MyPlugin.php.

add_action( 'wp_enqueue_scripts', 'my_script_enqueuer' );
function my_script_enqueuer() {

   wp_enqueue_script( 'my_voter_script',  plugins_url('sendvote.js', __FILE__), array( 'jquery'),'1.0', true);

   wp_localize_script( 'my_voter_script', 'myAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' )));

}

/* ===== My AJAX Handler ==== */ NOTE: This code is also in the "MyPlugin.php" file.

add_action( 'wp_ajax_nopriv_my_vote_count', 'my_ajax_handler' );  
add_action( 'wp_ajax_my_vote_count', 'my_ajax_handler');
function my_ajax_handler() {

//check_ajax_referer('votifier_nonce_key'); 

$user = (isset($_POST['username'])) ? $_POST['username'] : 'Missing User';
$key = (isset($_POST['key'])) ? $_POST['key'] : 'Missing Key';
$ip = (isset($_POST['ip'])) ? $_POST['ip'] : 'Missing ip Address';
$port = (isset($_POST['port'])) ? $_POST['port'] : 25566;
$service = (isset($_POST['service'])) ? $_POST['service'] : 'Missing Service';

define( 'PUBLIC_KEY_FORMAT', "-----BEGIN PUBLIC KEY-----\n%s\n-----END PUBLIC KEY-----" );

       /* XXXX Custom Code Here XXXX */
       // The function sendVote() was in a separate file. 
       // The file votifier.php contained the sendVote() function.  
       // note:  The functions were good and working outside WordPress
       // i.e. I fully tested them before trying to call the function from here.

       // I gave up trying and just 
       // put all the PHP code here and removed all functions.
       // I removed -- echo sendVote($p1,$p2,$p3,$p4,$p5); -- from this area.
       // when I did that the everything started to work.

       //  I know WordPress functions work here.
       //  Why can't I call my own custom function from a separate php file?

       //  Do I need to add an include statement?

wp_send_json_success($user . $fkey . $ip . $port . $service . $crypted);
wp_die(); // All ajax handlers die when finished

}

Its working now One answer is ...

put all the PHP code in the AJAX handler instead of trying to call an external PHP function.

  • Both sites using WordPress? – Abhik May 26 at 3:27
  • No. Site A is Wordpress and sending the vote. Site B is a game server receiving the vote. – ScottUSA May 26 at 3:29
  • Both servers are Linux Servers. – ScottUSA May 28 at 0:02
0

Sorry for late reply. First allow POSTing from your WordPress to your game server (using Apache or PHP or whatever method).

Then on your AJAX handler function, use wp_remote_post to POST your data to the Game Server.

$request = wp_remote_post( 'https://urltoyour/gameserver/voting/endpoint', array(
    'body'        => $body, // array/json formatted voting data

) );

$response = wp_remote_retrieve_body( $request );

For more in depth information, please check WordPress HTTP API.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.