将PHP变量从一个插件文件传递到另一个WordPress

时间:2012-07-15 01:02:36

标签: php wordpress plugins paypal

我正在使用WordPress插件并遇到了一个小路障。我正在处理与PayPal的IPN交互的脚本的一部分。我有一个插件目录中的ipn.php文件,该文件从PayPal收集响应并验证所有事务详细信息。 该部分工作正常,但第二部分是我必须将变量插入WordPress数据库以标记成功购买。 由于$ wpdb在ipn.php文件中不可用,我必须将数据传递到插件的核心进行处理。

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

这是一个例子,这个文件将用于$ .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

3 个答案:

答案 0 :(得分:1)

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

如果您正在进行多站点安装,请确保$ _SERVER ['HTTP_HOST']与您要访问的WordPress站点的URL匹配,然后才需要wp-load.php。

答案 1 :(得分:1)

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

我创建了一个自定义页面模板,除了基本的后循环外,它除了大部分内容。此页面永远不会显示给用户,因此所有面向显示的内容都不重要。然后我基于该模板创建了一个名为'ipnhandler'的页面,只有短代码作为内容。

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

http://www.mysite.com/ipnhandler

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

答案 2 :(得分:-3)

将您的ajax请求提交至wp-admin/admin-ajax.phpinclude 'wp-load.php';我个人建议admin-ajax.php。请参阅AJAX in Plugins