Не работает wordpress + ajax + $wpdb->get_results?
-
Требуется написать плагин калькулятора для расчета стоимости товара. Частный случай потому готовые решения не подошли.
Подключаю нужные скрипты и стили в function.php моего плагина
add_action( 'wp_enqueue_scripts', 'dealer_custom_calc_scripts' ); function dealer_custom_calc_scripts(){ wp_enqueue_style( 'calculator_styles', plugins_url() . '/dealer-custom-calculator/assets/css/calculator.css'); wp_enqueue_style( 'calculator_new_styles', plugins_url() . '/dealer-custom-calculator/assets/css/calculator_new.css'); wp_enqueue_script( 'rulon_script', plugins_url() . '/dealer-custom-calculator/assets/js/all_script.js', array(), '1.0.0', true ); } //Я не подключаю тут jQuery.ajax так как они подключаются и без меня и нормально работают. //Создаю вывод формы для будущего калькулятора function get_dealer_calc($calc_type){ $html=' <div class="calculator"> <div class="cal-container"> <div class="sizes row"> <div class="column small-6"> <label for="width"><div class="field-name">Ширина (см)</div></label> <div class="field-box"><input type="number" id="width" min="10"></div> </div> <div class="column small-6"> <label for="height"><div class="field-name">Высота (см)</div></label> <div class="field-box"><input type="number" id="height" min="10"></div> </div> </div> <div class="row" id="material" > <div class="res-box column small-9"> //Сдесь после ввода пользователем ширины и высоты изделия должны появиться варианты используемых материалов. Должны подтегиваться через jQuery.ajax </div> </div> <div class="row" id="sistems" > <div class="res-box column small-9"> //Сдесь после материала изделия должны появиться варианты используемых систем. Должны подтегиваться через jQuery.ajax </div> </div> <div class="row" id="price" > <div class="res-box column small-9"> //ну а здесь соответственно выводится полченная стоимость </div> </div> </div> </div> '; return $html; } add_shortcode('dealer-calc', 'get_dealer_calc'); //[dealer-calc calc_type="rulon-classic|rulon-zebra..."]
В all_script.js пишу такой вроде простеньки код
var width = document.getElementById('width'); var height = document.getElementById('height'); var material = document.getElementById('material'); width.oninput = function() { if (height.value.length && height.value >= 10 && width.value >= 10){ //console.log(width.value + " " + height.value); //вызвать функцию отправки длинны и ширины в PHP send(width, height); } }; height.oninput = function() { if (width.value.length && height.value >= 10 && width.value >= 10){ //console.log(width.value + " " + height.value); //вызвать функцию отправки длинны и ширины в PHP send(width, height); } }; function funcBefore(){} function funcSuccess(data){ //console.log(data); material.innerHTML = data; } function send(width, height) { //console.log(width.value + " " + height.value); // отправка длинны и ширины в PHP //$.post("/wp-content/plugins/dealer-custom-calculator/includes/calc.php",{width: width.value, height: height.value}, ) jQuery.ajax({ url: "http://my-tests3.pp.ua/wp-content/plugins/dealer-custom-calculator/includes/calc.php", type: "POST", data: ({width: width.value, height: height.value}), dataType: "html", beforeSend: funcBefore, success: funcSuccess }); }
Ну а в calc.php все еще проще
<?php if ($_POST['width'] && $_POST['height']){ //$html= 'Данные ширина ='.$_POST['width'].' и высота = '.$_POST['height'].' успешно приняты бекэндом'; //найдема материалы удовлетворяющие условию global $wpdb; $fivesdrafts = $wpdb->get_results( "SELECT * FROM <code>wp_posts</code> WHERE <code>ID</code> = '31706'" ); foreach ( $fivesdrafts as $fivesdraft ) { $html = "".$fivesdraft->post_title." "; } echo $html; // так я тестирую адекватность работы с БД ибо точно знаю что запрос не возвращает пустую строку, если переношу все это обращение к БД в function.php моего плагина то все отрабатыват отлично и выводит правильный результат } ?>
Пока calc.php представляет собой
<?php if ($_POST['width'] && $_POST['height']){ $html= 'Данные ширина ='.$_POST['width'].' и высота = '.$_POST['height'].' успешно приняты бекэндом'; echo $html; } ?>
Все проходит нормально, и я получаю то что и должен был получить, а как толдько я пытаюсь подключиться к БД то тут же получаю ошибку
«: Uncaught Error: Call to a member function get_results() on null in /home/charodey/my-tests3.pp.ua/www/wp-content/plugins/dealer-custom-calculator/includes/calc.php»
Если я правильно понимаю смысл ошибки то «global $wpdb;» не срабатывает потому-что jQuery.ajax напрямую посылает запрос к файлу «calc.php» минуя весь wordpress со всми его глобальными переменными.
ВОПРОС прост — что сделать для использования всех возможностей wordpress в моем calc.php?
- Тема «Не работает wordpress + ajax + $wpdb->get_results?» закрыта для новых ответов.