url(wordpress)中的查询变量在直接加载页面时工作正常,但在ajax上失败

时间:2013-06-17 13:33:33

标签: ajax wordpress

我有点问题,我找不到任何关于它的事情......我陷入僵局。

所以我的wp页面包含正常的循环,如果我直接在浏览器中调用此文件一切正常,我甚至可以使用查询变量,如:http://domain.com/blog/wp-content/themes/wovies-bones/getmovies.php?actor=x它工作正常,我得到单具有自定义分类的actor = x。

但是当我尝试使用ajax加载它时,它的行为有所不同,忽略我的get请求会返回所有帖子......

任何想法发生了什么?

ajax-jquery部分:

$.ajax({
  url: templatePath + "getmovies.php",
  type: "GET",
  data: filters_get,
  cache: false,
  success: function (data){
    console.dir(data);
  }
});

和php部分:

    /* Define these, So that WP functions work inside this file */
    define('WP_USE_THEMES', false);
    require('../../../wp-blog-header.php');


?>






    <div id="container">
        <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
        <div class="movie">
            <a href="<?php the_permalink() ?>">
                <?php
                    if (has_post_thumbnail()) {the_post_thumbnail('homepage-preview');}
                    else {echo '<img src="' . get_bloginfo( 'stylesheet_directory' ) . '/images/default-poster.jpg" />';}
                ?>
                <p class="comments"><?php comments_number('0 review','1 review','% reviews'); ?></p>
                <div class="description">
                    <h2><?php the_title(); ?></h2>
                    <?php the_excerpt(); ?>
                </div>
            </a>
        </div>
        <?php endwhile; else: ?>
            <!-- No movies found -->
        <?php endif; ?>
    </div><!-- End #container -->

filters_get看起来像这样:?actor = x&amp;

1 个答案:

答案 0 :(得分:0)

这样,您只需加载WordPress并运行自己的PHP文件。基本上,我认为你应该像这样重新定义你的WP_Query:

/*Define these, So that WP functions work inside this file */
define('WP_USE_THEMES', false);
require('../../../wp-blog-header.php');

global $wp_query;

$args = array(
    'post_type' => 'my-post-type',
    'my_tax'    => $_GET['my_tax']
);

$wp_query = new WP_Query($args);

// Your template stuff

如果您使用AJAX来获取帖子,则最好使用WordPress Codex中描述的钩子函数:

add_action('wp_ajax_get_my_cpt', 'get_my_cpt');
add_action('wp_ajax_nopriv_get_my_cptn', 'get_my_cpt');

function get_my_cpt() {
    $args = array(
        'post_type' => 'my-post-type',
        'my_tax'    => $_GET['my_tax']
    );

    $cpts = get_posts($args);

    if(empty($cpts)) {
        _e('No custom post to show');
        exit;
    }

    foreach($cpts as $cpt) {
        // Do you stuff to display your custom posts
    }

}

然后,您必须在AJAX调用中使用此类网址:http://www.domain.tld/wp-admin/admin-ajax.php?action=get_my_cpt&my_tax=keyword