如何允许独立页面访问 WordPress 功能而不包括/要求 wp_load 或 wp_config?
我正在开发一个插件,需要允许在独立的 php 页面上访问 WP 数据库。这个页面是一个简单的 curl 请求,它返回一个完整的 HTML 页面来显示。对于上下文,插件是来自 API 的职位列表,然后需要链接到完整的职位广告(完整的 HTML 页面)。
我目前拥有的代码是这样的(在 jobad.php 页面中):
$root = dirname(dirname(dirname(dirname(dirname(__FILE__)))));
if (file_exists($root.'/wp-load.php')) {
require_once($root.'/wp-load.php');
}
这是我从我找到的关于如何完成此任务的每个答案中提取的代码。包括来自 wordpress.org 自己的论坛。来自这个 stackoverflow 答案,例如:Using WPDB in standalone script?
它工作正常,但是当我尝试将插件提交到 WP 目录时,插件被拒绝以这种方式包含 wp_load.php。为什么不这样做是有道理的,但我找不到任何其他方法来使文件在 WordPress 中工作。
我需要的结果
从短代码生成的列表中,每个项目都有一个链接,该链接将返回一个完整的 HTML 页面。此 HTML 页面作为 cURL 响应返回——而不是 URL(或者我可以让每个链接驱动一个 iframe)。对于上下文,我正在以这种方式构建链接
$job_ad_link = plugins_url( 'includes/jobad.php' , dirname(__FILE__) );
$job_id = //id from database;
<a href="'.$job_ad_link.'?sgjobid='.$job_id.'">link</a>
因此调用 jobad.php 将为正确的 job_id 运行 cURL 函数并显示 cURL 响应。我可以将 cURL 作为 AJAX 运行并避免这个问题,但是因为它是一个完整的 HTML 页面,所以我不能简单地在 div 中返回 cURL。在 iframe 中是尴尬和不确定的,我宁愿不使用它(并且尝试没有成功)。
为澄清起见,来自 WordPress 的回复:
Including wp-config.php, wp-blog-header.php, wp-load.php, or pretty much any other WordPress > core file that you have to call directly via an include is not a good idea and we cannot > approve a plugin that does so unless it has a very good reason to load the file(s). It is > prone to failure since not all WordPress installs have the exact same file structure.
最佳答案
我实现了几个提供 AJAX 响应的插件,因此我还需要能够从 PHP 脚本访问 WordPress 函数。我解决了这个问题,包括 wp_config.php 文件,直到核心开发人员指出如何正确解决它。
由于这种方式不限于 AJAX 调用,我还使用它来为需要访问 WordPress 功能的 Facebook 应用程序呈现页面。所以这是你如何做的(只需将其放入你的 functions.php 或一个小插件中):
function full_job_ad_page() {
global $wpdb; // this is how you get access to the database
// do what ever you want with the ability to access WordPress functions.
// asuming that the one item is an option, just get it with get_option
$value_from_db = get_option( 'curl_value' );
// asuming that the value is in any other table, use some $wpdb function
$value_from_db = $wpdb->get_var( 'SELECT value FROM table' );
// include the curl file echoing the response
include( plugin_dir_path( __FILE__ ) . 'curl-script.php' );
die(); // this is required to return a proper result
}
add_action( 'wp_ajax_full_job_ad_page', 'full_job_ad_page' );
add_action( 'wp_ajax_nopriv_full_job_ad_page', 'full_job_ad_page' );
您可以使用这样的 URL 从函数获取响应:
http://example.com/wp-admin/admin-ajax.php?action=full_job_ad_page
注意:URL 中的 Action 必须匹配 Action Hook 的第一个参数的末尾(wp_ajax_ 和 wp_ajax_nopriv_ 之后的字符串)。
关于php - 在独立插件页面中访问 WordPress 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17743337/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时
您认为可以作为插件很好地存在于您的Rails应用程序中必须实现的哪些行为?您过去曾搜索过哪些插件功能但找不到?哪些现有的Rails插件可以改进或扩展,如何改进或扩展? 最佳答案 我希望在管理界面中看到一个引擎插件,它提供了应用程序中所有模型的仪表板摘要,以及可配置的事件图表。 关于ruby-on-rails-您希望看到哪些Rails插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio
我想从then子句中访问case语句表达式,即food="cheese"casefoodwhen"dip"then"carrotsticks"when"cheese"then"#{expr}crackers"else"mayo"end在这种情况下,expr是食物的当前值(value)。在这种情况下,我知道,我可以简单地访问变量food,但是在某些情况下,该值可能无法再访问(array.shift等)。除了将expr移出到局部变量然后访问它之外,是否有直接访问caseexpr值的方法?罗亚附注我知道这个具体示例很简单,只是一个示例场景。 最佳答案