Intereting Posts
Предупреждение PHP: модуль «mcrypt» уже загружен CloudFlare и протоколирование посетителей IP-адресов через PHP Symfony 1.4: лучший способ обеспечить загрузку файла без использования шаблона / представления последний идентификатор вставки с zend db table abstract Расширение mysql устарело и будет удалено в будущем: вместо этого используйте mysqli или PDO Как я могу захватить переменные сеанса php в javascript без обновления страницы? Как заставить символ замены превращаться в объект html в PHP? Как получить информацию о подключении пользователя на моем сайте с помощью JavaScript LinkedIn api? экономия места в таблице Mysql SHA1 vs md5 vs SHA256: что использовать для входа в PHP? Как отсортировать многомерный массив с помощью умножения ключей? Инструкция WHERE не работает в Joomla! 3.0.3. запрос php PHP smtp.office365.com для электронной почты В zend, как правильно напечатать запрос mysql? читать / писать теги mp4 id3 с помощью PHP

Запрос Ajax на query_posts не определен

Я пытаюсь выполнить запрос Ajax, чтобы загрузить больше сообщений при нажатии.

Однако у меня есть ошибка: Call to undefined function query_posts()

Вот мой сценарий Ajax:

 $('#next-container').click(function() { var IDs = []; $(".element").each(function(){ IDs.push(this.id); }); $('#next-container').html('loading'); $.ajax({ url: 'wp-content/themes/freakyshape/inc/data.php', type: 'POST', data: {'post_ids[]': IDs }, success: function(data) { $container.isotope( 'insert', $(data)); } }); }); 

мой файл data.php для загрузки сообщения:

 <?php if (isset($_POST['post_ids'])) { $ids = array(); $ids[] = $_POST['post_ids']; $posts_per_page = 8; global $wp_query; query_posts(array('post_type' => array('post', 'portfolio'), 'post__not_in' => $ids, 'posts_per_page' => $posts_per_page)); while (have_posts()) : the_post(); ?> // I do some stuff echo; <?php endwhile; wp_reset_query(); } ?> 

и в моих functions.php:

 $admin_path = TEMPLATEPATH . "/inc/"; require_once ($admin_path . "data.php"); 

Что мне нужно, чтобы заставить его работать?

РЕДАКТИРОВАТЬ:

Я стараюсь с правильным способом сделать это, но ничего не работает, как это … Я что-то пропустил … Нелегко правильно понять инструкцию по блогам, когда вы не владеете английским языком …

function.php:

 add_action('wp_ajax_load_post', 'load_post_callback'); add_action('wp_ajax_nopriv_load_post', 'load_post_callback'); wp_enqueue_script('script', get_template_directory_uri().'/js/load_post.js', array('jquery'), '1.0', 1 ); wp_localize_script('script', 'ajax_var', array('url' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('ajax-nonce'))); 

load_post.php:

 <?php function load_post_callback() { if (isset($_POST['post_ids'])) { $nonce = $_POST['nonce']; if ( ! wp_verify_nonce( $nonce, 'ajax-nonce' ) ) { die ( 'Interdit !'); } $ids = array(); $ids[] = $_POST['post_ids']; $posts_per_page = 8; global $wp_query; query_posts(array('post_type' => array('post', 'portfolio'), 'post__not_in' => $ids, 'posts_per_page' => $posts_per_page)); while (have_posts()) : the_post(); $post_type = get_post_type( $post->ID ); if ($post_type == 'post') { $post_type = 'blog'; } ?> <div class="element normal <?php echo $post_type; ?>" id="<?php echo the_id(); ?>"> <div class="element-container"> <img src="<?php echo wp_get_attachment_url( get_post_thumbnail_id()); ?>" class="thumbnail" /> <div class="element-back"></div> <div class="element-description"><?php echo the_title(); ?></div> <div class="element-category"><i class="icon"></i>&nbsp;&nbsp <?php echo $post_type; ?></div> <a class="link" href="" title="<?php echo the_title(); ?>" onclick="gestionClic(compteur'id');"> <div class="more">more.</div> </a> </div> </div> <?php endwhile; wp_reset_query(); } } ?> 

load_post.js:

 jQuery(document).ready(function() { var url = ajax_var.url; var nonce = ajax_var.nonce; jQuery('#next-container').click(function() { var IDs = []; $(".element").each(function(){ IDs.push(this.id); }); console.log(IDs); $('#next-container').html('loading'); $.ajax({ url: 'wp-content/themes/freakyshape/inc/load_post.php', type: 'POST', data: {'post_ids[]': IDs },//'post_ids='+IDs, success: function($data) { $container.isotope( 'insert', $data); } }) }) }) 

Использование Ajax в этом случае неверно. Чтобы ваш код работал, вам нужно включить wp-load.php и использовать некоторые другие wp-load.php обхода. Сеть полна этих ужасных примеров.

Отто, основной вкладчик, объясняет основные причины, по которым мы не включаем wp-load, пожалуйста. , И это:

Почему это неправильно?

  1. У вас нет первой подсказки, где wp-load.php на самом деле. Как каталог плагина, так и каталог wp-content можно перемещать в процессе установки. Все файлы WordPress можно было перемещать таким образом, вы собираетесь искать их?
  2. Вы мгновенно удвоили нагрузку на этом сервере. WordPress и PHP-обработка всего этого теперь должны загружаться дважды для каждой загрузки страницы. Один раз, чтобы создать страницу, а затем снова создать созданный javascript.
  3. Вы создаете javascript на лету. Это просто дерьмо для кеширования и скорости и т. Д.

Правильный способ:

  • используя wp_ajax_ hooks, чтобы запустить PHP-код и вернуть его в JS-файл.
  • используя wp_localize_script для передачи переменных PHP в файл JS.

Один мой рабочий пример в WordPress Answers. И много хороших примеров из одного из наших модов и ведущего участника тега Ajax .