web-dev-qa-db-fra.com

inclure wp-blog-header ne fonctionne pas sur MAMP

Pour clarifier ma question ... Mon plugin utilise/utilisait AJAX pour appeler le fichier pluginname/submit/pick.php Mon pluginname/pluginname.php contient l'en-tête habituel du plugin et wordpress le trouve automatiquement.

Question originale ... J'essaie d'utiliser le $wpdb global dans un plugin pour insérer des données dans l'une de mes tables. D'après la documentation, il me semble que je dois simplement inclure wp-blog-header.php. Cependant, lorsque j'essaie de le faire, j'obtiens une erreur.

Erreur PHP irrécupérable: [require()] (function.require): ouverture impossible: 'http: // localhost: 8888/blog/wp-blog-header .php '(include_path ='.:/Applications/MAMP/bin/php/php5.3.6/lib/php ') dans/Applications/MAMP/htdocs/blog/wp-content/plugins/pluginname/submit/pick.php sur la ligne 4

Mon pluginname/submit/pick.php (appelé par AJAX) a le code suivant

<?php
    $p = 'http://localhost:8888/blog/wp-blog-header.php';
    echo $p;
    require($p);
    echo 'hi';
?> 

Si je charge le pick.php, je vois http://localhost:8888/blog/wp-blog-header.php et c'est tout. Il doit donc échouer sur la condition requise, comme le confirme le journal des erreurs.

Le chemin est correct car j'ai inséré un écho rapide dans wp-blog-header.php, et une copie collée du résultat de pick.php dans la barre d'adresse a fonctionné.

Toute aide serait appréciée.

1
Joe_Schmoe

La réponse courte

L'erreur est parce que j'ai mis une URL à la place d'un chemin de fichier. et le correctif sur une ligne consiste à définir $p = '../../../../wp-blog-header.php';

La réponse longue

Suivre le lien de Kaiser m'a conduit sur une longue route qui a finalement conduit à ce que je crois être la bonne façon de procéder.

dans 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.
}

dans pluginname/js/pluginname.js

function submit_pick( var ) {
    jQuery.post( pluginname.ajaxurl, 
                 { 'action' : 'insert_pick',
                   'var' : var },
                 function(response) {
                     alert(response); },
                 'text' );
}

Depuis que je viens d’apprendre cela hier soir et que je n’ai qu’un mois à apprendre php/mysql/wp/js/ajax, il est fort possible que des erreurs se produisent. Mais cela a fonctionné pour moi hier soir, donc j'en suis content à ce stade.

0
Joe_Schmoe

Vous faites quelque chose de complètement faux.

Commentaire d'en-tête

Dans votre fichier principal, vous avez besoin du commentaire suivant (par exemple, tiré du formulaire de contact 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 détectera le plugin automatiquement. Alors simplement define/require/include ce dont vous avez besoin. Le plugin sera alors chargé juste avant le hook plugins_loaded, qui est le premier disponible. Vous pouvez ensuite utiliser l'environnement complet WP.

2
kaiser