如何在不包含/要求wp_load或wp_config 的情况下允许独立页面访问WordPress功能?
我正在开发一个插件,需要允许在独立的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的回复:
包括wp-config.php,wp-blog-header.php,wp-load.php,或几乎任何其他WordPress&gt;您必须直接通过include调用的核心文件不是一个好主意,我们不能&gt;批准一个这样做的插件,除非它有充分的理由加载文件。它是>由于并非所有WordPress安装都具有完全相同的文件结构,因此容易出现故障。
答案 0 :(得分:7)
我实现了几个提供AJAX响应的插件,因此我还需要能够从PHP脚本访问WordPress功能。我解决了这个问题,包括wp_config.php文件,直到核心开发人员指出,如何正确解决它。
由于这种方式不仅限于AJAX调用,我还使用为Facebook App呈现页面,需要访问WordPress功能。所以这就是你如何做到的(只需将它放入你的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中的操作必须与操作挂钩的第一个参数的结尾(wp_ajax_和wp_ajax_nopriv _之后的字符串)匹配。
答案 1 :(得分:1)
答案 2 :(得分:0)
怎么样?
<?php
// Include WordPress
define('WP_USE_THEMES', false);
require('path_to_wp/wp-blog-header.php');
query_posts('page_id=63');
?>
<?php while (have_posts()): the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php the_content(); ?>
<?php endwhile; ?>