在wordpress中创建ajax调用。我需要包括什么才能访问wordpress功能

时间:2013-01-06 18:55:30

标签: php ajax wordpress

我在wordpress中执行jquery ajax请求。这称为内部php脚本。 这个PHP脚本需要能够访问某些wordpress功能,如... functions.php 这对我来说很简单。 我无法做的是访问当前wordpress用户,$ wpdb对象的信息。 我的问题是...是否有一些wordpress文件,我可以包含,这使我可以访问所有数据(和functions.php)。 我希望你能理解我正在访问的东西,因为我知道这可能是世界上最彻底的解释 :d

4 个答案:

答案 0 :(得分:10)

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

当我创建一些与wordpress一起使用的自定义PHP时,我包含了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
});

答案 1 :(得分:3)

我通常在functions.php中设置一个动作钩子来监听基于前缀的AJAX请求,比如'wp_ajax_ *'。您还需要在javascript中引用wp-load.php,这可以使用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
    }
);

答案 2 :(得分:3)

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

here is a good place to start

答案 3 :(得分:0)

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

相反,您可以使用admin-ajax.php的功能 - 不要被'admin'部分欺骗 - 它用于前端和后端脚本。以下是一个示例:http://wp.smashingmagazine.com/2011/10/18/how-to-use-ajax-in-wordpress/