2013-09-12 5 views
0

Я пытаюсь вставить новую строку таблицы в таблицу wpdb. Данные поступают из формы, отправленной в скрипт.Вызов функции-функции-члена() для не-объекта WordPress

Я объявляю global $wpdb в начале скрипта и вставляю его в db, но по какой-то причине ему не нравится функция запроса, которую WordPress рекомендует использовать в кодексе.

// declare global wpdb 
global $wpdb; 

// set variables for posting to db 
$name = $_POST['name']; 
$email = $_POST['email']; 

// post to the db 
$wpdb->query($wpdb->prepare( 
    " 
     INSERT INTO $wpdb->entries 
     (name, email) 
     VALUES (%s, %s) 
    ", 
    $name, 
    $email 
)); 

Любые идеи относительно того, почему это прослушивание?

+0

Что говорит var_dump ($ wpdb)? И этот файл включен где-то или содержит что-то. Он должен быть связан с файлом, где $ wpdb является активным объектом –

+0

, если я var_dump перед ошибкой, он просто возвращает 'NULL' – lukeseager

+0

, так что это не фактический экземпляр. Wordpress должен иметь файл конфигурации, где они объявляют '$ wpdb = new someObject() ...', вы включаете этот файл, ваш файл включен в некоторые из внутренних файлов wordpress? Потому что, если это автономный файл, ничего не произойдет, $ wpdb исходит из ниоткуда –

ответ

9

Это функция wordpress, поэтому глобальный $wpdb можно вызвать, только если он был определен ранее.

Это означает, что внутри папки/wp-content/..., если вы используете скрипт с особыми функциями wp, он не будет работать, пока он не будет скомпилирован с ядром wordpress.

Так, например, шаблон темы или файлы плагинов могут работать только путем вызова $wpdb, но ваш автономный скрипт не будет, даже если он находится внутри каталога плагинов или тем.

Простым решением является включение /wp-config.php-файла перед запуском этого скрипта. Просто напишите:

include_once($_SERVER['DOCUMENT_ROOT'].'/wordpress/wp-config.php'); 

перед тем как позвонить $wpdb. Меня устраивает.

+1

Я бы предположил, что это тоже сработает. Как упоминалось в моих комментариях, включая 'wp-load.php', также был трюк :) – lukeseager

0
<?php 
/** 
* Created by PhpStorm. 
* User: manisha 
* Date: 05-11-2015 
* Time: 15:30 
*/ 
include_once($_SERVER['DOCUMENT_ROOT'].'/wordpress/wp-config.php'); 
$email = $_REQUEST['email']; 

global $wpdb; 
$result=$wpdb->query(
    $wpdb->prepare(
     " 
      DELETE FROM wp_addemail 
       WHERE email = %s 
       ", 
     $email 

    ) 
); 

this things is worked for me 
0

Я решил свою ошибку, используя

include_once($_SERVER['DOCUMENT_ROOT'].'/wordpress/wp-config.php'); 

Этого код на самом деле я представил данные формы в моей пользовательской таблице базы данных с помощью Ajax, но я получил фатальную ошибку .. Теперь решается фатальная ошибка ,