2011-01-09 18 views
5

Ad esempio:Voglio correre WP_Query su un file php separato per una chiamata AJAX

<?php $numposts = $_POST['showposts']; ?> 


<?php $home_query_bottom = new WP_Query("cat=&showposts=$num_posts&offset=5"); $b = 0; ?> 
<ul class="thumbs"> 
    <?php while ($home_query_bottom->have_posts()) : $home_query_bottom->the_post(); 
     $do_not_duplicate = $post->ID; $b++; ?> 

     <li class="post-<?php the_ID(); ?> thumb"><?php get_the_image(array('custom_key' => array('thumbnail'), 'default_size' => 'thumbnail', 'width' => '160', 'height' => '160')); ?></li> 
    <?php endwhile; wp_reset_query(); $b = 0; ?> 
</ul> 

Il codice di cui sopra è su un proprio file php pronto per essere chiamato dalla pagina di wordpress principale, tuttavia ottengo una errore che dice la classe wp_query non trovata. Suppongo che sia perché non sto usando l'header.html che probabilmente include un sacco di include. Cosa mi serve per quella pagina per utilizzare la classe wp_query?

risposta

3

È necessario creare la pagina che ajax chiama una pagina di modello. Crea una nuova pagina nel tuo blog e assegna il modello. nessuna intestazione non include.

7

È possibile disattivare il motore di template e quindi includere l'intestazione.
// Include WordPress
define('WP_USE_THEMES', false);
require_once('PATHHERE/wp-blog-header.php');

+0

includere la mia intestazione? Ma è una chiamata Ajax che voglio caricare nella mia homepage – Adam

+0

Ecco perché si disattivano i temi. l'intestazione caricherà tutte le funzioni necessarie, ma poiché i temi sono disattivati ​​non produrrà effettivamente il contenuto dell'intestazione. – MrGlass

+0

ah ok. Beh, penso che il mio host abbia disabilitato require_once e include perché ottengo errori di accesso ai file URL. Il che mi fa meravigliare di come wordpress includa le loro classi essenziali ecc ... – Adam

2

Questo ha funzionato per me, forse aiuterà qualcun altro.

La mia situazione è che ho un file js che utilizza getScript. In quello script ho un sacco di chiamate .load() su un file php. In cima lo posto.

if (file_exists("../../../wp-load.php")) 
    { 
    require_once("../../../wp-load.php"); 
    } 

Modificare il ../ a come mai le directory di quanti il ​​file wp-carico è alto.

Modifica - Utilizzando WP 3.4.1

5

È necessario includere il file che ha le funzioni di Wordpress si trovano nella directory principale del installazione di WordPress:

define('WP_USE_THEMES', false); 
require_once('../../../wp-load.php'); 

../../. ./ = percorso della directory principale sull'installazione

Ho trovato un bel tutorial su questo here.