Ajax request to query_posts is indefinido

Estou tentando implementar um pedido do Ajax para carregar mais posts no clique.

No entanto, eu recebi um erro: Call to undefined function query_posts()

Aqui está o meu script do 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)); } }); }); 

meu arquivo data.php para carregar post:

  array('post', 'portfolio'), 'post__not_in' => $ids, 'posts_per_page' => $posts_per_page)); while (have_posts()) : the_post(); ?> // I do some stuff echo;  

e em minhas funções.php:

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

O que eu preciso para fazer funcionar?

EDITAR:

Eu tento com o caminho certo para fazê-lo, mas nada funciona assim … Sinto falta de algo … Não é fácil entender corretamente as instruções do blog quando não fala o inglês …

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:

  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 " id=""> 
<img src="https://stackoverflow.com/questions/17529083/ajax-request-to-query-posts-is-undefined/" class="thumbnail" />
 &nbsp
<a class="link" href="" title="" onclick="gestionClic(compteur'id');">
more.

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); } }) }) }) 

Usar o Ajax dessa maneira não está correto. Para que seu código funcione, você precisa include wp-load.php e usar outras soluções alternativas. A web está cheia desses horríveis exemplos.

Otto, principal colaborador, explica os principais motivos pelos quais não incluímos wp-load, por favor. . E estes são:

Por que isso é errado

  1. Você não tem a primeira pista onde wp-load.php realmente é. Tanto o diretório de plug-in como o diretório de conteúdo do wp podem ser movidos pela instalação. TODOS os arquivos do WordPress podem ser movidos dessa maneira, você vai procurar por eles?
  2. Você dobrou instantaneamente a carga nesse servidor. WordPress e o processamento PHP de tudo agora precisam ser carregados duas vezes por cada carga de página. Uma vez para produzir a página, e novamente para produzir o seu javascript gerado.
  3. Você está gerando javascript on the fly. Isso é simplesmente uma porcaria de cache e velocidade e tal.

O caminho certo é:

  • usando wp_ajax_ hooks para executar o código PHP e devolvê-lo ao arquivo JS.
  • usando wp_localize_script para passar variables ​​PHP para o arquivo JS.

Um exemplo de trabalho meu na WordPress Answers. E muitos bons exemplos de um dos nossos mods e principais contribuintes para a tag Ajax .