插件中的Wordpress自定义函数,用于从指定类别

时间:2016-08-08 17:52:29

标签: php wordpress

希望您能帮助我弄清楚为什么我无法 get_first_post_in_category 成功返回可用的帖子ID。目前我使用Wordpress Plugin Boilerplate创建一个插件,从主循环中删除指定类别的第一个帖子(通过管理选项页面)。一切顺利,直到我尝试以编程方式检索帖子ID。

这里我定义了我的钩子(工作正常):

// In private function define_public_hooks()
$this->loader->add_action( 'pre_get_posts', $plugin_public, 'exclude_featured_post_pre_injection');

这是我用来从主查询中排除特定帖子的回调函数。如果手动设置$ first_post_in_category_id,则效果很好。如果我尝试将其设置为" = get_first_post_in_category();"我被抛出500错误。

public function exclude_featured_post_pre_injection($query){

    // Doesn't work
    $first_post_in_category_id = $this->get_first_post_in_category();

    //Works
    // $first_post_in_category_id = '427';

    if ($query->is_home() && $query->is_main_query()) {
        $query->set('post__not_in', array($first_post_in_category_id));
    }
}

这是问题:::这个函数我试图只返回要在其他动作/过滤器回调中使用的类别中第一篇文章的ID。如果我这称呼它,它会返回500错误。

public function get_first_post_in_category(){

    $cat_id = get_option('sticky_content_category_id');
    // currently returns (string) '3' which has posts in it

    $args = array(
        'posts_per_page' => 1,
        'cat' => $cat_id
    );

    $latest_cat_post = new WP_Query($args);

    while ( $latest_cat_post->have_posts() ) : $latest_cat_post->the_post();

    $first_post_id = the_ID();

  endwhile;
  wp_reset_postdata();

  return $first_post_id;
}

有关解决我遇到的问题的最佳方法的任何想法吗?

1 个答案:

答案 0 :(得分:0)

我无法看到它如何导致错误500,但下面的代码对我有效。

$category_id = get_cat_ID('Wordpress');

//echo $category_id;

$args = array(
    'posts_per_page' => 1,
    'cat' => $category_id,
    'orderby' => 'ID',
    'order' => 'DESC'
);

$query = new WP_Query($args);

while($query->have_posts()):$query->the_post();
    echo the_ID();
endwhile;