3

我正在我的 wordpress 中执行一个 jquery ajax 请求。这调用了一个内部 php 脚本。这个 php 脚本需要能够访问某些 wordpress 功能,例如...functions.php,这对我来说很简单。我不能做的是访问当前 wordpress 用户 $wpdb 对象之类的信息。我的问题是......是否有一些我可以包含的 wordpress 文件让我可以访问所有这些数据(和 functions.php)。我希望您了解我正在访问的内容,因为我知道这可能是世界上最糟糕的解释:D

4

4 回答 4

10

糟糕的方式(正如其他人指出的那样)

当我创建一些自定义 PHP 以与 wordpress 一起使用时,我包含了该wp-load.php文件。然后加载所需的所有内容,包括$wpdb.

require_once('wp-load.php'); // relative path from your PHP file

global $wpdb;
$wpdb->show_errors = TRUE; // useful for when you first start

我发现这是快速修复的一个不错的起点。但是,您必须记住,这将加载比您实际需要的更多的功能。从而导致性能时间变慢。

好方法

一旦功能变得更加复杂,“糟糕”的实现就不会那么好了。所以我转而写插件。WordPress codex 包含有关使用 AJAX 和插件的良好信息:http: //codex.wordpress.org/AJAX_in_Plugins

在最基本的形式中,您需要注册您的 AJAX 钩子:

// 'wp_ajax_foo' is the hook, 'foo' is the function that handles the request
add_action( 'wp_ajax_foo', 'foo');

您还需要相应的功能(在这种情况下foo):

function foo() {
    // handle the AJAX request
    $bar = $_POST['bar'];
}

然后在您的 JavaScript 中确定要与该action属性一起使用的钩子,但忽略该wp_ajax部分:

$.post(ajaxurl, { action: 'foo', bar: true }, function(response) {
    // do something with response
});
于 2013-01-06T19:01:35.670 回答
3

我通常会设置一个动作挂钩functions.php来侦听基于前缀的 AJAX 请求,例如“wp_ajax_*”。您还需要wp-load.php在 javascript 中引用,可以使用wp_head. 设置完成后,只需在您的 AJAX 请求中使用一个名为“action”的变量来指示您要使用的功能。

// add javascript reference to wp-load.php as ajaxurl
function core_add_ajax_url(){
    ?>
    <script type="text/javascript">var ajaxurl = "<?php echo site_url( 'wp-load.php' ); ?>";</script>
    <?php 
}
add_action('wp_head', 'core_add_ajax_url', 1 );

// process all wp_ajax_* calls
function core_add_ajax_hook() {
    /* Theme only, we already have the wp_ajax_ hook firing in wp-admin */
    if ( !defined( 'WP_ADMIN' ) && isset($_REQUEST['action']) ){
        do_action( 'wp_ajax_' . $_REQUEST['action'] );
    }
}
add_action( 'init', 'core_add_ajax_hook' );

// Hook your function to the 'wp_ajax_*' for processing
function my_function(){
    // do some things and then return JSON
}
add_action( 'wp_ajax_my_function', 'my_function' );

您的 Javascript 请求将类似于以下内容:

jQuery.postJSON( 
    ajaxurl, // request url
    { action: 'my_function' }, // request parameters
    function (response){ // callback
        // handle the response
    }
);
于 2013-01-06T20:06:51.093 回答
3

admin-ajax.phpWordPress 中的 AJAX 请求通常通过目录上文件中的特殊挂钩发送wp-admin。从那里您将可以访问所有 WP 功能。

这是一个很好的起点

于 2013-01-06T20:10:03.067 回答
0

您永远不能包括 wp-load.php 或 wp-config.php - 这是一种不好的做法,本文解释了原因: http: //ottodestruct.com/blog/2010/dont-include-wp-load-请/。此外,Wordpress.org 团队不建议直接包含任何 Wordpress 核心文件。

相反,您可以利用 admin-ajax.php 的功能——不要被“admin”部分所欺骗——它在前端和后端脚本中都使用。这是一个例子:http ://wp.smashingmagazine.com/2011/10/18/how-to-use-ajax-in-wordpress/

于 2013-09-23T13:23:00.647 回答