【问题标题】:Creating an ajax call in wordpress. What do i have to include to access wordpress functions在 wordpress 中创建 ajax 调用。我必须包括什么才能访问 wordpress 功能
【发布时间】:2013-01-06 18:55:29
【问题描述】:

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

【问题讨论】:

  • 警告:最好的答案是 Mantanya 一个(加载 wp-load.php 进行 ajax 调用是一种不好的做法)

标签: php ajax wordpress


【解决方案1】:

不好的方式(正如其他人指出的那样)

当我创建一些用于 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
});

【讨论】:

【解决方案2】:

我通常在functions.php 中设置一个动作挂钩,以根据前缀(例如“wp_ajax_*”)侦听 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
    }
);

【讨论】:

    【解决方案3】:

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

    here is a good place to start

    【讨论】:

      【解决方案4】:

      您永远不能既不包含 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/

      【讨论】:

      • 嗨,欢迎来到 Stack Overflow。不鼓励将大部分内容保留在链接中的答案,因为我们不能保证链接将始终存在。你能在你的回答中总结它们吗?
      猜你喜欢
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      相关资源
      最近更新 更多