0

我正在开发一个 WordPress 插件,但遇到了一个小障碍。我正在编写与 PayPal 的 IPN 交互的脚本的一部分。我在插件目录中有一个 ipn.php 文件,该文件收集来自 PayPal 的响应并验证所有交易细节。这部分工作正常,但第二部分是我必须将变量插入 WordPress 数据库以标记成功购买。由于ipn.php文件中没有$wpdb,所以我必须将数据传递给插件的核心进行处理。

我对这方面的其他解决方案持开放态度,非常感谢您的帮助。谢谢!

这是一个示例,此文件将用于 $.load() 以填充管理面板中的区域

<?php
    global $wpdb;
    $promos = $wpdb->get_results("SELECT * FROM ". $wpdb->prefix ."voltbam_promocodes");

    foreach($promos as $promo){
        ?>
            ID: <?php echo $promo->id ?><br />
            Name: <?php echo $promo->name ?><br />
            Value: <?php echo $promo->value ?><br />
            Type: <?php echo $promo->type ?><br /><br />

        <?
    }

?>

这是输出

Fatal error: Call to a member function get_results() on a non-object in (filename) on     line 3
4

3 回答 3

1

要求../../../wp-load.php将引入 WordPress 核心并让您访问 $wpdb 全局。这通常是您上方的三个目录,但如果您的脚本位于更远的子目录中,则可能更多。

如果您使用的是多站点安装,请确保 $_SERVER['HTTP_HOST'] 与您要访问的 WordPress 站点的 URL 匹配,然后再要求 wp-load.php。

于 2012-07-15T05:16:30.170 回答
1

在我自己的设置中,所有 IPN 处理代码都在我的插件中。我有一个短代码,可以在需要时调用它。

我创建了一个自定义页面模板,除了基本的帖子循环之外,它几乎没有任何内容。这个页面永远不会向用户显示,所以任何面向显示的东西都不重要。然后我基于该模板创建了一个名为“ipnhandler”的页面,其中仅包含短代码作为内容。

我已将此页面设置为 PayPal 的 IPN 处理程序。因为它是一个常规页面,所以没有指向 WordPress 文件夹或类似内容的链接。只是这个:

http://www.mysite.com/ipnhandler

当 PayPal 调用此页面时,Wordpress 会看到简码并调用我的插件,该插件会执行所需的 IPN 处理。

于 2012-07-15T14:17:39.267 回答
-3

要么提交您的 ajax 请求,wp-admin/admin-ajax.php要么include 'wp-load.php';我个人建议admin-ajax.php。请参阅插件中的 AJAX

于 2012-07-15T04:50:47.703 回答