2012-07-15 95 views
0

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

我很乐意为此提供其他解决方案,非常感谢您的帮助。谢谢!

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

不知道,但它听起来像你正在做出一些不正确的假设。你是什​​么意思*由于$ wpdb在ipn.php文件中不可用,... * ??我的理解是,'$ wpdb'在wordpress中是全局的,这意味着为了在函数中使用它,您只需要在函数顶部插入语句'global $ wpdb;'。对?当然,只有在初始化后才需要引用该变量,但这不应该成为问题。这个问题的真正标题应该是:“我如何在插件中修改WP数据库?”要做到这一点,请参考全局'$ wpdb'。 – Cheeso 2012-07-15 03:11:23

+0

这似乎并没有工作。我将用我正在使用的代码和输出来更新我的文章。 – 2012-07-15 03:42:44

+0

这听起来像是他设置了PayPal来为IPN处理调用'ipn.php',所以即使该文件位于插件目录中,也不会通过WordPress进行。这就是为什么$ wpdb不可用。 – 2012-07-15 14:19:33

回答

1

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

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

+0

我可以确定我的插件将始终在所有安装的相同位置吗?我还没有实施wordpress多站点支持。 – 2012-07-15 06:35:46

+0

无论是否为多站点,WordPress插件目录始终与安装的其余部分位于相同的位置。 – 2012-07-15 13:50:41

-3

要么提交你的阿贾克斯请求wp-admin/admin-ajax.phpinclude 'wp-load.php';我个人建议admin-ajax.php。见AJAX in Plugins

+0

他没有进行AJAX调用。他告诉PayPal当他们有即时付款通知消息时打开一个特定的URL。 我不认为你真的想让他们在你的WordPress设置中调用一些东西。 – 2012-07-15 14:22:08

+0

该OP明确声明他使用'$ .load()' – Rob 2012-07-15 19:49:56

1

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

我创建了一个自定义页面模板,除了基本的后循环外几乎所有的东西都被剥离了。这个页面从不显示给用户,所以没有一个面向显示的东西很重要。然后,我根据该模板创建了一个名为'ipnhandler'的页面,只用简码作为内容。

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

http://www.mysite.com/ipnhandler

当贝宝调用此页面,WordPress的看到简码,并调用我的插件,它确实需要的IPN处理。

+0

这是一个非常酷的想法。如果我可以标记多个答案,我也会标记这个答案。 – 2012-07-15 15:18:58

+0

我对Stackoverflow很新,所以我不知道如果你可以改变你的“最佳答案”选择,但你**可以**点击向上箭头! ; ^) – 2012-07-15 15:32:02

+0

从技术上讲,对我来说这不是“最好”的答案,因为我已经写了很多它,所以我对它进行了投票,并将在未来的项目中记住它。谢谢你的帮助! – 2012-07-15 19:30:12

相关问题