将 PHP 变量从一个插件文件传递到另一个 WordPress
Posted
技术标签:
【中文标题】将 PHP 变量从一个插件文件传递到另一个 WordPress【英文标题】:Pass PHP Variables from one plugin file to another WordPress 【发布时间】:2012-07-14 08:56:31 【问题描述】:我正在开发一个 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
【问题讨论】:
不确定,但听起来您做出了一些不正确的假设。 因为 $wpdb 在 ipn.php 文件中不可用,你是什么意思,... ?据我了解,$wpdb
在 wordpress 中是全局的,这意味着要在函数中使用它,您只需在函数顶部插入语句 global $wpdb;
。正确的?当然,您只需要在初始化后引用该 var,但这应该不是问题。这个问题的真正标题应该是:“如何在插件中修改 WP DB?”为此,请参考全局 $wpdb
。
这似乎不起作用。我将使用我正在使用的代码和输出更新我的帖子。
听起来他设置了 PayPal 来调用 'ipn.php' 进行 IPN 处理,所以它根本不通过 WordPress,即使文件在插件目录中。这就是 $wpdb 不可用的原因。
@Mike Fulton - 啊,如果是这样的话,我的建议就行不通了。
【参考方案1】:
要求 ../../../wp-load.php
将引入 WordPress 核心并让您访问 $wpdb 全局。这通常是您上方的三个目录,但如果您的脚本位于更远的子目录中,则可能更多。
如果您使用的是多站点安装,请确保 $_SERVER['HTTP_HOST'] 与您要访问的 WordPress 站点的 URL 匹配,然后再要求 wp-load.php。
【讨论】:
我能否确定我的插件在所有安装中始终位于同一个位置?我还没有实现 wordpress 多站点支持。 WordPress 插件目录相对于安装的其余部分始终位于同一位置,无论是否为多站点。【参考方案2】:在我自己的设置中,所有 IPN 处理代码都在我的插件中。我有一个短代码,可以在需要时调用它。
我创建了一个自定义页面模板,除了基本的帖子循环之外,该模板几乎没有任何内容。这个页面永远不会向用户显示,所以任何面向显示的东西都不重要。然后,我基于该模板创建了一个名为“ipnhandler”的页面,其中仅包含短代码作为内容。
我已将此页面设置为 PayPal 的 IPN 处理程序。因为它是一个常规页面,所以没有指向 WordPress 文件夹或类似内容的链接。就是这样:
http://www.mysite.com/ipnhandler
当 PayPal 调用此页面时,Wordpress 会看到短代码并调用我的插件,该插件会执行所需的 IPN 处理。
【讨论】:
这是一个很酷的主意。如果我可以标记多个答案,我也会标记这个。 我是 *** 的新手,所以我不知道您是否可以更改“最佳答案”选择,但您可以点击向上箭头! ;^) 从技术上讲,这对我来说不是“最佳”答案,因为我已经写了很多,所以我投票赞成,并将在未来的项目中记住它。感谢您的帮助!【参考方案3】:将您的 ajax 请求提交给wp-admin/admin-ajax.php
或include 'wp-load.php';
我个人建议admin-ajax.php
。见AJAX in Plugins。
【讨论】:
他没有进行 AJAX 调用。他告诉 PayPal 在收到即时付款通知消息时打开一个特定的 URL。我不认为您真的希望他们在您的 WordPress 设置过程中调用某些东西。 OP 特别声明他正在使用$.load()
以上是关于将 PHP 变量从一个插件文件传递到另一个 WordPress的主要内容,如果未能解决你的问题,请参考以下文章
将变量从一个表传递到另一个 PHP 页面中的另一个 [重复]