在插件中使用 WP_Query

问题描述 投票:0回答:2

我目前正在尝试调整 WordPress 的内容幻灯片插件,以使其与 WPML(多语言插件)兼容。为了实现这一点,我只需要从特定类别中获取帖子,将它们放入一个数组中并返回该数组。 WP_Query 让我很难做到这一点,因为它似乎在循环中无限次地获取最新的帖子。我没有编写 WordPress 插件的经验,所以我将感谢您能给我的任何提示。

这是我正在尝试调整的插件类方法的代码。

    function get_valid_posts(){

    $validPosts = array();
    $this_post = array();
    $id_pot = array();

    $my_query = new WP_Query('cat=15&showposts=10');

    if($my_query->have_posts()) {
        while ($my_query->have_posts()) : 
            $post = $my_query->post;

            if(!in_array($post->ID, $id_pot)){
                $this_post['id'] = $post->ID;
                $this_post['post_content'] = $post->post_content;
                $this_post['post_title'] = $post->post_title;
                $this_post['guid'] = $post->guid;

                array_push($id_pot, $post->ID);
                array_push($validPosts, $this_post);

            }
        endwhile;
    }

    return $validPosts;
}

请注意,我添加了 $id_pot 数组是为了过滤重复的条目,但如果查询/循环可以工作,则不需要这样做。

提前致谢!

php wordpress class plugins
2个回答
3
投票

我已经成功解决了这个问题:

    function get_valid_posts(){

    $validPosts = array();
    $this_post = array();
    $id_pot = array();
    $i = 0;

    $my_query = new WP_Query('category_name=gallery-post&showposts=10');

    if($my_query->have_posts()) {
        while($i < $my_query->post_count) : 
            $post = $my_query->posts;

            if(!in_array($post[$i]->ID, $id_pot)){
                $this_post['id'] = $post[$i]->ID;
                $this_post['post_content'] = $post[$i]->post_content;
                $this_post['post_title'] = $post[$i]->post_title;
                $this_post['guid'] = $post[$i]->guid;

                $id_pot[] = $post[$i]->ID;
                array_push($validPosts, $this_post);

            }

            $post = '';
            $i++;

        endwhile;
    }

    return $validPosts;
}

$my_query->post 返回特定帖子的数据。相反,我必须使用 $my_query->post*s* 来获取一个数组,其中包含作为对象获取的所有帖子。


2
投票

您错过了对该函数的调用

the_post();

while ($my_query->have_posts()) : 
  $my_query->the_post();
  $post = $my_query->post;
  // ...
endwhile;

参见 WordPress 循环

© www.soinside.com 2019 - 2024. All rights reserved.