Недавно созданные PHP-файлы в плагине, не работающем под управлением PHP-функций WordPress - PullRequest
0 голосов
/ 28 октября 2019

ОБНОВЛЕНИЕ

Изучив, как именно эта проблема реплицировалась, я обнаружил, что включил сценарий обработчика формы в оператор require_once в своем основном сценарии обработчика зависимостей. Класс $wpdb срабатывает только с жестко закодированным массивом значений, когда скрипт загружается на страницу администратора или общедоступную страницу веб-сайта. После того как я удалил файл из сценария зависимостей, проблема $wpdb стала соответствовать жестко закодированным значениям или без них. Тогда я заключаю, что проблема связана с подключением этого файла (?) К остальной части WordPress, поскольку он даже не отвечает на основные функции, такие как get_header(); или get_footer();, он действует как отдельный PHP-файл.

Я перезапустил Apache и MySQL, чтобы убедиться, что сервер обновлен.

Мой основной файл плагина содержится в /wp-content/plugins/myplugin

Содержит функцию шорткода, которая отображает форму. in /wp-content/plugins/myplugin/shortcodes/

Сценарий, вызываемый для обработки формы, находится в /wp-content/plugins/myplugin/processes/

ОРИГИНАЛЬНЫЙ ВОПРОС: wpdb INSERT работает с образцом массива, но не с идентичным $ _POSTмассив

Я создаю настраиваемую форму, которая предназначена для использования только администратором в интерфейсе. Цель этого - записать расходы в таблицу базы данных в MySQL. Я пробовал несколько способов создания запроса, используя wpdb->insert и wpdb->prepare, но он не работает с $_POST superglobal.

Я создал идентичный жестко закодированный массив с именем $ sample_data, иповторение этого точно таким же образом работает. После использования различных операторов echo и var_dump я обнаружил, что глобальная переменная $wpdb не запускается, если я использую $_POST, но работает нормально, если $_POST не включен в мой код.

Я новичок в этом, поэтому я хотел бы понять, что я делаю неправильно и почему это не работает. Любая помощь будет принята с благодарностью.

Вот настройки, с которыми я работаю:

Ubuntu 18.04.01 localhost, WordPress 5.2.4, PHP 7.2, MySQL 5.7.27, Apache 2.4.29

Единственный активный плагин, установленный в моей установке WordPress, - это тот, над которым я работаю, и я запускаю тему Underscores с применением простых стилей CSS.

Вот мой код для справки:

$table_name = $wpdb->prefix.'expenses';

if(isset($_POST['submit'])){
    foreach($_POST as $post_object => $post_value){
        if($post_value != NULL && $post_value !== 'submit'){
            $post_object_array[] = $post_object;
            $post_placeholder_array[] = '%s';
            $post_value_array[] = $post_value;
        }
    }
    $table_columns = "(".implode(', ', $post_object_array).")";
    $table_placeholders = "(".implode(', ', $post_placeholder_array).")";
    $query_builder = "INSERT INTO bsynfs_expenses $table_columns VALUES $table_placeholders";
    $prepare_query = $wpdb->prepare($query_builder, $post_value_array);
    $result = $wpdb->query($prepare_query);
}

Вот как кодируется form на внешнем интерфейсе. Это часть шорткода .php файла в моем плагине:

  <form id="add_expense" action="<?php echo($plugin_directory_url.'processes/expense-process.php'); ?>" method="post">
        <input type="text" name="expense_type" value="" placeholder="expense_type">
            <input type="text" name="grocery_vendor" value="" placeholder="grocery_vendor">
            <input type="text" name="laundry_vendor" value="" placeholder="laundry_vendor">
            <input type="text" name="product_skus" value="" placeholder="product_skus">
            <input type="text" name="expense_reference" value=""  placeholder="expense_reference">
            <input type="text" name="expense_description" value="" placeholder="expense_description">
            <input type="submit" name="submit" value="submit" id="add_expense_submit">

1 Ответ

0 голосов
/ 28 октября 2019

Попробуйте, у меня это сработало и сработало здесь. 1 - Создайте файл в своем шаблоне и добавьте этот код, затем создайте страницу в админке и выберите шаблон «Тест» или как хотите, чтобы он назывался.

Затем просто протестируйте

<code><?php 
/*
    Template Name: Teste
*/
global $wpdb;
$table_name = $wpdb->prefix.'expenses';

if(isset($_POST['submit'])){
    echo "<pre>";
    print_r($_POST);
    echo "
"; exit (); foreach ($ _ POST как $ post_object => $ post_value) {if ($ post_value! = NULL && $ post_value! == 'submit') {$ post_object_array [] = $ post_object; $ post_placeholder_array [] = '% s '; $ post_value_array [] = $ post_value;}} $ table_columns = "(" .implode (', ', $ post_object_array). ")"; $ table_placeholder = "(" .implode (', ', $ post_placeholder_array)). ")"; $ query_builder = "INSERT INTO bsynfs_expenses $ table_columns VALUES $ table_placeholder"; $ prepare_query = $ wpdb-> prepare ($ query_builder, $ post_value_array); $ result = $ wpdb-> query ($ prepare_query);}get_header ();?>представить$ post_value) {if ($ post_value! = NULL && $ post_value! == 'submit') {$ post_object_array [] = $ post_object;$ post_placeholder_array [] = '% s';$ post_value_array [] = $ post_value;}} $ table_columns = "(" .implode (',', $ post_object_array). ")";$ table_placeholder = "(" .implode (',', $ post_placeholder_array). ")";$ query_builder = "INSERT INTO bsynfs_expenses $ table_columns VALUES $ table_placeholder";$ prepare_query = $ wpdb-> prepare ($ query_builder, $ post_value_array);$ result = $ wpdb-> query ($ prepare_query);

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...