Неустранимая ошибка: вызов функции-члена get_results () для необъекта (jQuery From Plugin & WordPress) - PullRequest
3 голосов
/ 23 сентября 2011

Я пытаюсь использовать плагин Form jQuery в плагине Wordpress.Я следую этому примеру .Я поставил в очередь свои сценарии и создал свою форму.В csf_form_handler.php, эквивалентном json-echo.php примера, я могу получить доступ к элементам, выбранным в моей форме (у меня есть группа радиопереключателей).

Моя цель - использовать значения, выбранные в форме в операторе SELECT, для возврата данных из пользовательской таблицы базы данных wordpress.

$csf_selected_sport = $_POST['csf_radiobutton_group_sport'];

global $wpdb;

$csf_db_table = $wpdb->prefix . "activity";


$csf_data = $wpdb->get_results($wpdb->prepare("
            SELECT *
            FROM " .$csf_db_table. "
            WHERE  " . $csf_selected_sport ." ")); 

К сожалению, я получаю:

Примечание: пытаюсь получить свойство не-объекта (в строке префикса $ wpdb->)

Неустранимая ошибка: вызов функции-члена get_results () для необъекта (в строке $ csf_data)

Код выше в csf_form_handler.php отсутствует в функции.Я не знаю, если это имеет значение.

Как я могу изменить код, чтобы я мог использовать $ wpdb?

Спасибо.

Ответы [ 4 ]

14 голосов
/ 21 ноября 2012

Я столкнулся с той же проблемой, но решил ее, включив файл wp-config.php из корня папки WordPress следующим образом:

require_once('../../../wp-config.php');
global $wpdb;

Надеюсь, это поможет.

5 голосов
/ 23 сентября 2011

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

Предположим, что эта форма, с которой вы работаете, отображается в передней части сайта набоковая панель.Для обработки данных, поступающих из этой формы, когда пользователь нажимает «отправить», вы можете создать функцию в файле нашего плагина, например:

function $csf_get_data(){

global $wpdb; //since your this function is in your plugin’s file, $wpdb should be available, so no errors here! =)

$csf_selected_sport = $_POST['csf_radiobutton_group_sport'];

$csf_db_table = $wpdb->prefix . "activity";

$csf_data = $wpdb->get_results($wpdb->prepare("
            SELECT *
            FROM " .$csf_db_table. "
            WHERE  " . $csf_selected_sport ." ")); 

    //do your stuff with $csf_data
}

//now run it everytime the plugin is run
if(isset($_POST[‘submit’])){
    $csf_get_data();
}

Теперь вы можете настроить свойство действия формы для отправки данных.на той же странице, которая сможет справиться с этим с помощью функции выше.Вы можете использовать:

    action=””

или

    action="<?php the_permalink()?>"

Обратите внимание: чтобы убедиться, что данные поступают с вашего сайта (особенно общедоступных форм), не забывайте использовать wp_nonce_field () длясоздайте одноразовое поле, которое может быть проверено посредством wordpress через wp_nonce (): http://codex.wordpress.org/Function_Reference/wp_nonce_field

Надеюсь, это поможет,

Vq.

2 голосов
/ 23 сентября 2011

Где вы используете этот код?Звучит так, как будто вы его запускаете, ДО создания экземпляра $ wpdb (или за его пределами).

Как вы загружаете файл csf_form_handler.php?Вы включаете как часть скрипта в Wordpress, или это ваш собственный плагин?Если это последнее, помните, что вам нужно сначала активировать его, чтобы WP мог включить его в последовательность загрузки (я предполагаю, что он уже активирован, но JIC)

Чтобы проверить, уже есть ли объект $ wpdbЕсли вы были созданы, вы можете запустить <?php print_r($wpdb);?>, чтобы распечатать содержимое объекта.

Дайте мне знать больше, и, надеюсь, я смогу вам помочь.

1 голос
/ 27 января 2019

Я получил эту фатальную ошибку, потому что я забыл поместить

global $wpdb;

в файл, куда я поместил функцию $ wpdb-> get_results () .

...