私の質問を明確にするために...プラグインはAJAXを使用してファイルを呼び出しますpluginname/submit/pick.php
My pluginname/pluginname.php
には通常のプラグインヘッダーが含まれ、wordpressはそれ。
元の質問...プラグインでグローバル$wpdb
を使用して、テーブルの1つにデータを挿入しようとしています。ドキュメントからは、wp-blog-header.php
を含めるだけでよいようですが、そうしようとするとエラーが発生します。
PHPの致命的なエラー: [
require()
](function.require):必要なオープンに失敗しました 'http:// localhost:8888/blog/wp-blog-header.php'(include_path = ' 。:/ Applications/MAMP/bin/php/php5.3.6/lib/php ')/Applications/MAMP/htdocs/blog/wp-content/plugins/pluginname/submit/pick.php in 4行目
私のpluginname/submit/pick.php
(AJAXによって呼び出されます)には次のコードがあります
<?php
$p = 'http://localhost:8888/blog/wp-blog-header.php';
echo $p;
require($p);
echo 'hi';
?>
pick.php
をロードすると、http://localhost:8888/blog/wp-blog-header.php
が表示されます。したがって、エラーログが確認するように、それはrequireで失敗しているに違いありません。
wp-blog-header.php
にクイックエコーを挿入し、pick.php
からの出力をコピーしてアドレスバーに貼り付けたので、パスは正しく動作しました。
任意の助けをいただければ幸いです。
短い答え
エラーは、ファイルパスの代わりにURLを入力したためです。そして1行の修正は$p = '../../../../wp-blog-header.php';
を設定することです
長い答え
カイザーのリンクをたどることで私は長い道のりをたどり、最終的にはこれが正しい方法だと私が信じるものにつながります。
pluginname/plugin.php
に
// load your javascript, and setup the ajaxurl variable
// this is loading my js everywhere, we could load it only where needed
// 0.01 is the version of your js, increment this each time you change your js
// so that you don't keep using the same cached version
wp_enqueue_script( 'pluginname', plugins_url( 'js/pluginname.js', __FILE__ ), array( 'jquery' ), 0.01 );
wp_localize_script( 'pluginname', 'pluginname', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
// wp_ajax_insert_pick is a combination of wp_ajax_ and the 'action' : 'insert_pick' you provide in your js
// ajax_insert_pick is the function below that is called to handle your ajax request
add_action( "wp_ajax_action_name", "ajax_insert_pick" );
// this basically replaces pluginname/submit/pick.php
function ajax_insert_pick() {
global $wpdb;
$var = $_POST['var'];
// handle the ajax request here
echo $response;
die(); // needed otherwise wordpress may append a zero to your response.
}
pluginname/js/pluginname.js
に
function submit_pick( var ) {
jQuery.post( pluginname.ajaxurl,
{ 'action' : 'insert_pick',
'var' : var },
function(response) {
alert(response); },
'text' );
}
私は昨夜これを学んだばかりなので、php/mysql/wp/js/ajaxを学ぶのはたった一ヶ月ですから、上記の中にはかなりのエラーがあるかもしれません。しかし、昨夜私にとってはうまくいったので、この段階では満足しています。
あなたは完全に間違ったことをしています。
メインファイルでは、次のコメントが必要です(例:Contact form 7から抜粋)。
<?php
/*
Plugin Name: Contact Form 7
Plugin URI: http://contactform7.com/
Description: Just another contact form plugin. Simple but flexible.
Author: Takayuki Miyoshi
Author URI: http://ideasilo.wordpress.com/
Text Domain: wpcf7
Domain Path: /languages/
Version: 3.1.2
*/
WPは自動的にプラグインを検出します。それからあなたが必要なものだけをdefine/require/include
してください。プラグインはplugins_loaded
フックの直前にロードされます。これはあなたにとって最初のものです。その後、完全なWP環境を使用できます。