5

如何允许独立页面访问 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答案,例如:在独立脚本中使用WPDB?

它工作正常,但是当我尝试将插件提交到 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 > 您必须通过包含直接调用的核心文件不是一个好主意,我们不能 > 批准插件,除非它有很好的理由加载文件。它 > 容易失败,因为并非所有 WordPress 安装都具有完全相同的文件结构。

4

3 回答 3

7

我实现了几个提供 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 中的动作必须匹配动作钩子的第一个参数的结尾(wp_ajax_ 和 wp_ajax_nopriv_ 之后的字符串)。

于 2013-07-19T10:14:07.127 回答
1

我想你会在这些文章中找到答案:

插件中的 AJAX

在 Wordpress 中使用 AJAX 的 5 个技巧

另请查看WordPress Answers上的这个问题,我在其中找到了链接。

于 2013-07-19T10:04:19.163 回答
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; ?>
于 2013-07-19T10:16:00.737 回答