1

我有一个小问题,我找不到任何关于它的信息……我陷入了僵局。

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

但是当我尝试使用 ajax 加载相同的内容时,它的行为会有所不同,并且忽略我的获取请求会返回所有帖子......

任何想法发生了什么?

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&

4

1 回答 1

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 调用中使用这种 url:http://www.domain.tld/wp-admin/admin-ajax.php?action=get_my_cpt&my_tax=keyword

于 2013-06-17T17:01:34.563 回答