Требуется написать плагин калькулятора для расчета стоимости товара. Частный случай потому готовые решения не подошли.
Подключаю нужные скрипты и стили в 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 `wp_posts` WHERE `ID` = '31706'" );
foreach ( $fivesdrafts as $fivesdraft ) {
$html = "<p>".$fivesdraft->post_title."</p>";
}
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?