WP_Query自定义posts_per_page默认值失效求助:空值时默认3不生效
解决WP_Query默认值不生效的问题
我来帮你搞定这个问题~你遇到的情况是因为isset()的判断逻辑不符合预期,咱们一步步拆解:
问题根源
get_option('news_blurb_blurbs_per_page_setting')在选项值为空时,会返回空字符串(而不是null或者未定义)。这时候isset($number_of_posts)会返回true(因为变量确实存在,只是值为空),所以三元运算符(isset($number_of_posts)? $number_of_posts : $default_posts)会直接用空值,而不是触发默认的3。
修复方案
方案1:用!empty()替换isset()
把判断逻辑改成检查值是否非空,这样空字符串、0、false这些无效值都会触发默认值:
$number_of_posts = get_option('news_blurb_blurbs_per_page_setting'); $default_posts = 3; $args = array( 'post_type' => 'all_news_blurbs', 'orderby' => 'date', 'order' => 'DESC', 'numberposts' => 3, // 小提示:WP_Query里更推荐用posts_per_page,numberposts是旧参数 'posts_per_page' => (!empty($number_of_posts)? $number_of_posts : $default_posts) );
方案2:利用get_option的默认值参数(更简洁)
get_option本身支持第三个参数作为默认值,当选项不存在或者为空时会自动返回这个默认值,省得自己写三元判断:
$default_posts = 3; // 直接把默认值传给get_option,一步到位 $number_of_posts = get_option('news_blurb_blurbs_per_page_setting', $default_posts); $args = array( 'post_type' => 'all_news_blurbs', 'orderby' => 'date', 'order' => 'DESC', 'posts_per_page' => $number_of_posts );
另外还要注意,你原来的代码里$args数组最后少了闭合的);,记得补上,不然会触发语法报错~
内容的提问来源于stack exchange,提问作者sudhakar
相关产品推荐
相关产品推荐

