希望您能帮助我弄清楚为什么我无法 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;
}
有关解决我遇到的问题的最佳方法的任何想法吗?
答案 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;