web-dev-qa-db-ja.com

MAMPで動作しないwp-blog-headerを含める

私の質問を明確にするために...プラグインは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からの出力をコピーしてアドレスバーに貼り付けたので、パスは正しく動作しました。

任意の助けをいただければ幸いです。

1
Joe_Schmoe

短い答え

エラーは、ファイルパスの代わりに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を学ぶのはたった一ヶ月ですから、上記の中にはかなりのエラーがあるかもしれません。しかし、昨夜私にとってはうまくいったので、この段階では満足しています。

0
Joe_Schmoe

あなたは完全に間違ったことをしています。

ヘッダコメント

メインファイルでは、次のコメントが必要です(例: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環境を使用できます。

2
kaiser