我正在开发一个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
需要../../../wp-load.php
将引入WordPress核心,并允许您访问$wpdb全局。这通常是您上面的三个目录,但如果您的脚本在另一个子目录中,则可能会更多。
如果您在多站点安装,请确保$_SERVER['HTTP_HOST']与您想要访问的WordPress网站的URL匹配,然后再要求wp-load.php。
在我自己的设置中,所有IPN处理代码都在我的插件中。我有一个短代码,在需要时调用它。
我创建了一个自定义页面模板,除了基本的帖子循环之外,它几乎没有任何内容。这个页面永远不会显示给用户,所以面向显示的东西都不重要。然后,我基于该模板创建了一个名为"ipnhandler"的页面,内容仅为短代码。
我已经将此页面设置为PayPal的IPN处理程序。因为这是一个常规页面,所以没有指向WordPress文件夹或类似内容的链接。只是这个:
http://www.mysite.com/ipnhandler
当PayPal调用此页面时,Wordpress会看到短代码并调用我的插件,该插件会进行所需的IPN处理。
将您的ajax请求提交给wp-admin/admin-ajax.php
或include 'wp-load.php';
我个人建议admin-ajax.php
。请参阅插件中的AJAX。