Я пытаюсь выполнить запрос 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>   <?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, пожалуйста. , И это:
Почему это неправильно?
- У вас нет первой подсказки, где wp-load.php на самом деле. Как каталог плагина, так и каталог wp-content можно перемещать в процессе установки. Все файлы WordPress можно было перемещать таким образом, вы собираетесь искать их?
- Вы мгновенно удвоили нагрузку на этом сервере. WordPress и PHP-обработка всего этого теперь должны загружаться дважды для каждой загрузки страницы. Один раз, чтобы создать страницу, а затем снова создать созданный javascript.
- Вы создаете javascript на лету. Это просто дерьмо для кеширования и скорости и т. Д.
Правильный способ:
wp_ajax_
hooks, чтобы запустить PHP-код и вернуть его в JS-файл. wp_localize_script
для передачи переменных PHP в файл JS. Один мой рабочий пример в WordPress Answers. И много хороших примеров из одного из наших модов и ведущего участника тега Ajax .