5

wp_load または wp_config を含めたり要求したりせずに、スタンドアロンのページが WordPress の機能にアクセスできるようにするにはどうすればよいですか?

プラグインを開発しており、スタンドアロンの php ページで WP データベースへのアクセスを許可する必要があります。このページは、表示する完全な HTML ページを返す単純な curl 要求です。文脈上、プラグインは、完全な求人広告 (完全な HTML ページ) にリンクする必要がある API からの求人のリストです。

私が現在持っているコードはこれです(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 ページは、URL ではなく cURL 応答として返されます (または、各リンクが 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 を単純に返すことはできません。In a 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 に答える