Intereting Posts
Почему мой jQuery AJAX возвращает 0? Пользовательский тип сообщения с галереей изображений Как добавить файл SQL с PHP в базу данных WordPress Ограничить количество пользователей, которые могут создавать роли Как получить мою страницу для загрузки библиотеки jQuery UI Effects? Нужно ли использовать esc_url с тегами шаблонов, такими как get_permalink? Как публиковать новые сообщения / страницы в корневой папке вместо подпапки, но сохранить прежнюю структуру? Отображать функцию пользовательских сообщений ТОЛЬКО, если она имеет значение Как создать постоянную ссылку с двумя категориями, с порядком, основанным на родительской категории? Что использовать для выполнения кода при сохранении страницы настроек плагина? Удалите пул из пользовательских URL-адресов post post post home.php или frontpage (через настройки) для темы? Белый экран смерти в приборной панели после чистой установки Как я могу ограничить период публикации публикации? Используйте mysql_query вместо $ wpdb query

AJAX wp-mysql работает слишком медленно

Я сделал функцию ajax, которая возвращает все сообщения, начиная с определенного алфавита, предположим, что пользователь нажимает на букву A, тогда будут отображаться все сообщения, начинающиеся с буквы A, любые, как мне удастся выполнить эту функцию, но только если я использую обычный mysql, но я хочу использовать wp-mysql,

Мой код будет говорить за меня;)

echo $_GET['letter']; $getLetter = $_GET['letter']; global $wpdb; global $post; $result = $wpdb->get_results('SELECT * FROM wp_posts where post_title LIKE "'.$getLetter.'%" AND post_status = "publish" AND post_type="post"'); while($row = $result) { echo '<a href="' . $row["guid"] . '">' . $row['post_title'] . '</a><br>'; } 

Я использую этот код, который получает письмо через URL-адрес и ищет его в базе данных, но если я использую вышеуказанный код, для поиска сообщения требуется слишком много времени (требуется больше минуты), но если я использую ниже кода

 echo $_GET['letter']; $getLetter = $_GET['letter']; $con = mysql_connect('localhost', 'root', ''); mysql_select_db("wordpress", $con); $result = mysql_query('SELECT * FROM wp_posts where post_title LIKE "'.$getLetter.'%" AND post_status = "publish" AND post_type="post"'); while($row = mysql_fetch_array($result)) { echo '<a href="' . $row["guid"] . '">' . $row['post_title'] . '</a><br>'; } 

то все работает быстро,

Может ли кто-нибудь объяснить мне это? Я не знаю wp-db, но я хочу, чтобы это работало в wpdb

Я делаю что-то неправильно?

EDITED AJAX CODE:

 <script type="text/javascript"> jQuery(function($) { $(document).ready(function() { $("#Loading").hide(); $(".letter").bind('click', function(){ $("#Loading").fadeIn(); //show when submitting var val = $(".letter").val; $.ajax({ url:'<?php bloginfo('template_directory'); ?>/newContent.php?letter='+$(this).html(), success:function(data){ $("#Loading").fadeOut('fast'); //hide when data's ready $("#content1").html(data); } }); }); }); }); </script> 

Solutions Collecting From Web of "AJAX wp-mysql работает слишком медленно"

Когда вы вызываете базу данных напрямую, а затем используете объект $wpdb это быстрее по простой причине, которую вы вызываете только из базы данных, а когда вы используете $wpdb он загружает дополнительные функции и в основном большую часть WordPress, прежде чем вы сможете использовать $wpdb объект.

Вы должны попробовать использовать WordPress Ajax api (не совсем api, но правильный способ использования ajax с WordPress). В основном вам нужно обернуть свой код в функцию и убедиться, что вы умрете в конце:

 function my_ajax_callback(){ $getLetter = $_GET['letter']; global $wpdb; global $post; $result = $wpdb->get_results('SELECT * FROM wp_posts where post_title LIKE "'.$getLetter.'%" AND post_status = "publish" AND post_type="post"'); while($row = $result) { echo '<a href="' . $row["guid"] . '">' . $row['post_title'] . '</a><br>'; } die(); } 

то вам нужно добавить крюк действия:

 //if you want only logged in users to access this function use this hook add_action('wp_ajax_ACTION_NAME', 'my_AJAX_processing_function'); //if you want none logged in users to access this function use this hook add_action('wp_ajax_nopriv_ACTION_NAME', 'my_AJAX_processing_function'); 

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

затем просто направьте вызов ajax на admin-ajax.php и добавьте ACTION_NAME:

 <script type="text/javascript"> jQuery(function($) { $(document).ready(function() { $("#Loading").hide(); $(".letter").bind('click', function(){ $("#Loading").fadeIn(); //show when submitting var val = $(".letter").val; var data = {action: 'ACTION_NAME', letter: val}; $.ajax({ url:'url to wp-admin/admin-ajax.php', success:function(data){ $("#Loading").fadeOut('fast'); //hide when data's ready $("#content1").html(data); } }); }); }); }); </script> 

таким образом, он не будет загружать весь WordPress только для этого ajax-вызова.