我正在使用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
答案 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.php
或include 'wp-load.php';
我个人建议admin-ajax.php
。请参阅AJAX in Plugins。