Заполните комбинированный список на основе выбора в другом комбинированном окне в WordPress
Я хочу заполнить комбинированный список на основе выбора в другом комбинированном окне в шаблоне WordPress. параметры combobox взяты из базы данных. Я использую AJAX для получения данных из combobox1, а затем отправляю в help.php. В help.php есть запрос для заполнения параметров, который затем отображается в combobox2. Но когда я выбираю опцию в combobox1, combobox2 не отвечает. Кроме того, идентификатор из combobox1 успешно отправлен. Тогда я понял, что запрос не выполняется. Я думаю этот скрипт ниже
global $wpdb
это главная проблема. Так вот в чем вопрос: 1. Как сделать глобальный $wpdb выполненным? 2. Если глобальный $wpdb успешно выполнен, будет ли заполняться combobox2 автоматически?
вот сценарий формы
<form method="post">
<table>
<tr>
<td width="200px">
<select name="region" id="region" style="width:200px;">
<option value="0">-- Choose --</option>
<!-- region -->
<?php
if(count( $region )){
foreach($region as $reg){
echo '<option value='.$reg->id_region.'" >'.$reg->name_region.'</option>';
}
} else {
echo '<option value="">No result</option>';
}
?>
</select></td>
<td width="200px"><select name="subregion" id="subregion" style="width:200px;">
<option value="0">-- Choose --</option>
</select>
</td>
<td><input type="submit" value="Process" class="button" /></td>
</tr>
</table>
</form>
а вот и AJAX
<script src="http://code.jquery.com/jquery-1.10.2.min.js" type="text/javascript" > </script>
<script type="text/javascript">
$(document).ready(function(){
$("#region").change(function(){
var region = $("#region").val();
$.ajax({
url: "<?php bloginfo('template_url'); ?>/help.php" ,
data: "region=" + region,
success: function(data){
$("#subregion").html(data);
}
});
});
});
</script>
и вот help.php
<?php
global $wpdb;
$sub = $_REQUEST['region'];
$table_name = $wpdb->prefix . 'sub_region';
$query = "SELECT * FROM $table_name WHERE id_region='$sub' ";
$sql = $wpdb->get_results( $query);
if(count($sql)){
foreach( $sql as $q ){
echo '<option value="'.$q->id_sub_region.'" >'.$q->name_sub_region.'</option>';
}
} else{
echo '<option value="0">-- No Result --</option>';
} ?>
2 ответа
Добавлять require_once('../../../wp-load.php');
в начале файла в help.php(перед глобальным $wpdb;). Это загружает все встроенные функции WordPress.
Надеюсь это поможет.
Похоже, вам нужно использовать встроенную функциональность WordPress AJAX.
Я считаю, что лучший способ сделать это так: (не используя wp-load.php)
function enqueue_scripts_styles_init() {
// ajax init
wp_enqueue_script( 'ajax-handle-name', plugins_url( '/js/the-ajax.js', __FILE__ ), array('jquery'), 1.0 );
// set ajaxurl
wp_localize_script( 'ajax-handle-name', 'ajax_object', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
}
add_action('init', 'enqueue_scripts_styles_init');
Вот как я использую это в плагинах. Чтобы использовать в темах, просто измените URL плагинов на шаблон или каталог таблиц стилей и поместите его в файл functions.php.
- Читайте об AJAX в WordPress: http://codex.wordpress.org/AJAX
- Прочитайте об AJAX в плагинах WordPress: http://codex.wordpress.org/AJAX_in_Plugins