当前位置: 首页 > 面试题库 >

WordPress自定义插件开发中的纯JavaScript基本AJAX调用

陶朝明
2023-03-14
问题内容

我正在开发一个自定义WordPress插件,在其中,我在主插件页面上有一些HTML表单,在后页上有一些PHP的函数,如从数据库中获取信息等。为详细解释,这里是代码。

主插件文件:

<?php
/*
Plugin Name: WP Testing Plugin
Plugin URI: http://www.wordpress.org/WP-Testing-Plugin
Description: A Detailed Description About This Plugin.
Author: Muhammad Hassan
Version: 0.1
Author URI: http://www.wordpress.org
*/

/*____________WP Testing Plugin Admin/Script_____________*/
function wp_testingPlugin_admin() {
    echo '
        <form id="searchForm" onsubmit="return searchData(this)">
            <input name="WhatToSearch" type="text" />
            <input type="submit" value="Search"/>
            <input type="reset" value="Reset"/>
            <div id="showReturnData"></div>
        </form>
    ';

    echo '
        <script type="text/javascript">
            function searchData(incomingForm) {
                // Confirmation To Add A Data
                var answer = confirm("Are You Sure Want To Search?");
                if (answer){
                    // If User Click Ok Then Execute The Below Code     
                    var FD = new FormData(incomingForm); // Get FORM Element Object
                    FD.append("Function", "SearchFunction"); // Adding Extra Data In FORM Element Object To Hit Only This Function In Ajax Call File
                    var ajx = new XMLHttpRequest();
                    ajx.onreadystatechange = function () {
                        if (ajx.readyState == 4 && ajx.status == 200) {
                            document.getElementById("showReturnData").innerHTML = ajx.responseText;             
                        }
                    };
                    ajx.open("POST", "'.plugin_dir_url( __FILE__ ).'my_functions.php", true);
                    ajx.send(FD);
                    document.getElementById("showReturnData").innerHTML = "<div class="error">ERROR: AJAX Did Not Respond.</div>";
                }
                return false; // For Not To Reload Page
            }
        </script>
    ';
//if you want only logged in users to access this function use this hook
add_action('wp_ajax_ACTION_NAME', 'searchData');

//if you want none logged in users to access this function use this hook
add_action('wp_ajax_nopriv_ACTION_NAME', 'searchData');

}
/*__________________________________________________________________*/


/*____________WP Testing Plugin Option_____________*/
//Adding "WP Testing Plugin" Menu To WordPress -> Tools
function wp_testingPlugin() {
    //  add_management_page( $page_title, $menu_title, $capability, $menu_slug, $function);                  Menu Under Tools
    add_management_page("WP Testing Plugin By Hassan", "WP Testing Plugin", 'activate_plugins', "WP-Testing-Plugin", "wp_testingPlugin_admin");
}
add_action('admin_menu', 'wp_testingPlugin');
/*__________________________________________________________________*/
?>

这是 my_functions.php 文件。

<?php
/****************************************************************************/
//Garb The Function Parameter
/****************************************************************************/
$Function = $_POST['Function'];


/****************************************************************************/
// Run Search Function
/****************************************************************************/
if ($Function == "SearchFunction"){

    if(!isset($_POST['WhatToSearch'])){
        $WhatToSearch = "Nothing";
    } else {
        $WhatToSearch = $_POST['WhatToSearch'];
    }

    echo "<div class='success'>SUCCESS: Function Is Working Perfectly And Getting Data ".$WhatToSearch.".</div>";
}

/****************************************************************************/
// Run Another Function
/****************************************************************************/
if ($Function == "AnotherFunction"){
    echo "<div class='success'>SUCCESS: Another Function Is Working Perfectly.</div>";
}

?>

但是我的代码无法正常工作,甚至无法命中my_functions.php文件。这里有什么问题?仅需要基本步骤即可在此模式下工作。


问题答案:

最后,在获得 Thaikolja的帮助之后
,在这里,我将以简单的步骤分享问题的完整示例。此答案也被视为完整的基本Ajax插件示例。我现在个人建议将每个文件分开存放,以实现更好,干净和舒适的编码。

主插件文件:

<?php
/*
Plugin Name: WP Testing Plugin
Plugin URI: http://www.wordpress.org/WP-Testing-Plugin
Description: A Detailed Description About This Plugin.
Author: Muhammad Hassan
Version: 0.1
Author URI: http://www.wordpress.org
*/

// Calling All PHP File To Load
include('my_functions.php');

/*____________WP Testing Plugin Admin/Script_____________*/
function wp_testingPlugin_admin() {
    echo '
        <form id="searchForm">
            <input name="WhatToSearch" type="text" />
            <input type="submit" value="Search"/>
            <input type="reset" value="Reset"/>
            <div id="showReturnData"></div>
        </form>
    ';
}
/*__________________________________________________________________*/

/*____________WP Testing Plugin Option_____________*/
//Adding "WP Testing Plugin" Menu To WordPress -> Tools
function wp_testingPlugin() {
    //  add_management_page( $page_title, $menu_title, $capability, $menu_slug, $function);                  Menu Under Tools
    add_management_page("WP Testing Plugin By Hassan", "WP Testing Plugin", 'activate_plugins', "WP-Testing-Plugin", "wp_testingPlugin_admin");
}
add_action('admin_menu', 'wp_testingPlugin');
/*__________________________________________________________________*/
?>

my_functions.php

<?php
add_action( 'admin_enqueue_scripts', 'my_enqueue' );
function my_enqueue() {
      wp_enqueue_script( 'ajax-script', plugin_dir_url( __FILE__ ).'my_javascript.js', array('jquery') );
      wp_localize_script( 'ajax-script', 'my_ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}
/****************************************************************************/
// Run Search Function
/****************************************************************************/
/* Register This Function When This File Is Loaded To Call By WordPress AJAX */
add_action('wp_ajax_nopriv_SearchFunction', 'ajaxSearchFunction'); // For Web Visitors
add_action('wp_ajax_SearchFunction', 'ajaxSearchFunction'); // For Admin User
function ajaxSearchFunction(){
    if($_POST['WhatToSearch'] == ""){
        $WhatToSearch = "Nothing";
    } else {
        $WhatToSearch = $_POST['WhatToSearch'];
    }
    echo "<div class='success'>SUCCESS: Function Is Working Perfectly And Getting Data ".$WhatToSearch.".</div>";
}
?>

my_javascript.js

jQuery(document).ready(function() {
jQuery('#searchForm').on("submit",function(e) {
var incomingData = jQuery('#searchForm').serializeArray();
incomingData.push({name: 'action', value: 'SearchFunction'});
alert(JSON.stringify(incomingData));
jQuery.ajax({
type: 'post',
url: my_ajax_object.ajax_url,
data: incomingData,
success: function(response) {
jQuery('#showReturnData').html(response);
},
error: function(response) {
jQuery('#showReturnData').html('<div">Error</div>');
},
});
return false; // For Not To Reload Page
});
});

感谢您阅读本文。如果您喜欢这个基本示例,请投票答疑解惑,以帮助他人。



 类似资料:
  • 我有一个自定义的Wordpress插件,可以处理很多事情,包括我的产品的下载页面。这些链接不是指向我的插件的实际PHP页面的路径。例如 但我的插件实际处理下载功能的路径如下: 我已经构建了一个应用程序,使用这些下载链接授予用户购买后下载产品的能力。但是现在我需要发送额外的数据随着网址。当用户点击下载链接时,我如何发送一些额外的_POST美元的数据。我已经试过了 但是当我试图重复myplugin.p

  • 我目前正在写一个WoodPress插件,它可以与WooCommerce一起工作。我查询WooCommerce订单,目标是使用来自荷兰route planner服务的API,使用这些订单的地址来规划配送路线。 为我编写PHP已经有一段时间了,我最后一次编写PHP是在7年前,所以我的PHP技能有些生疏。 查询订单后,我想调用函数routexl_generate(),该函数在我的代码中定义。但是,运行此

  • 概述 毫末科技插件模板: 开发 实现短代码 将短代码保存到你当前的主题的 functions.php中即可。 // 短代码相关函数 add_shortcode('mycode', 'function_name'); // 定义一个新的 Shortcode remove_shortcode('mycode'); // 移除一个 Shortcode remove_all_s

  • WordPress插件开发全攻略对于许多WordPress用户来说,插件是必须的。WordPress插件使得那些只有很少或者没有编程能力的用户可以扩展他们博客的功能。插件的形式多种多样,在WordPress中,插件几乎可以做任何事情。

  • 本文向大家介绍一些基本的WordPress插件,包括了一些基本的WordPress插件的使用技巧和注意事项,需要的朋友参考一下 我知道您在想什么,但这不只是另一篇WordPress插件博客文章。每隔几周我会被问到我会推荐什么WordPress插件,而我总是总是从头到尾给出一些不连贯的列表。因此,我没有做这件事,我想记下我经常使用的插件是一个好主意,并建议其他插件使用。我还将尝试向我使用的插件添加任

  • 问题内容: 我写了一个wordpress插件,在模板中添加了一些注释功能。通过ajax,所有内容都应传输到wordpress数据库中。 问题是-ajax处理程序需要一个php文件,用于通过捕获查询 在用户传输查询时,ajax处理程序将如下所示调用php文件: 该 getvars.php 不知道WordPress的环境,因为它是由用户直接调用提交,我想补充的WordPress的环境类,包括是不是好作