获得访问wordpress核心功能在我的插件's自定义脚本


Gaining access to wordpress core functions in my plugin's custom script

我创建了一个WordPress插件,其中有2个php文件a.phpb.phpa.php是主要的插件文件,其中b.php将使用AJAX调用。现在在b.php,我需要访问WordPress的核心功能,如plugins_url, sanitize_text_field等。之前,我使用require_once包含了wp-load.php文件,但是被WordPress拒绝了。

有更好的方法来实现这一点吗?

为了将普通PHP页面转换为使用WordPress的页面,您需要在每个页面的开头添加以下代码片段之一:

<?php 
/* Short and sweet */
define('WP_USE_THEMES', false);
require('./wp-blog-header.php');
?>

https://codex.wordpress.org/Integrating_WordPress_with_Your_Website Grab_the_header

省时省力,用ajax的方式做吧。

首先,添加你的脚本并传递ajax url给它(你可以硬编码它,如果你的插件是为个人使用),像这样:
wp_enqueue_script( 'my_ajax_script', plugins_url( '/myscript.js', __FILE__ ), array('jquery') );
wp_localize_script( 'my_ajax_script', 'my_ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php'));
在js中,你可以通过my_ajax_object.ajax_url 访问url

您的ajax调用看起来像

var request = {action: 'name_of_your_action' /*other params go here*/}
$.ajax({type: "post", dataType: "json", url: my_ajax_object.ajax_url, data: request}).done(function (e) 
{
    alert('All cool');
})

然后编写处理ajax调用的函数

function my_ajax_handler()
{
    /*Do some magic*/
    echo json_encode(array('some_response_var'=>'some response value'));
    die();
}

最后,让wordpress知道你想要调用动作name_of_your_action来处理你的函数。你可以这样做

add_action( 'wp_ajax_name_of_your_action', 'my_ajax_handler' ); // for logged in users
add_action( 'wp_ajax_nopriv_name_of_your_action', 'my_ajax_handler'); // for guests

更多信息请参考法典