修改WordPress短代码:显示所有含bookdate值的图书
修改WordPress短代码:展示所有
bookdate字段有值的图书 没问题,我来帮你调整这个短代码,让它返回所有bookdate字段不为空的图书,而不是仅显示指定日期的内容。
原代码的核心问题
你当前的代码里,这一行硬编码了特定日期的查询条件,导致只返回该日期的图书:
$the_query = Books::search()->where('bookdate', '2019-03-30 11:00:00');
修改后的完整代码
我们需要把查询条件改成检查bookdate字段存在且不为空,以下是调整后的代码:
function open_books( $atts ) { $a = shortcode_atts( array( 'amount' => 5 ), $atts ); $args = array( 'posts_per_page' => intval( $a['amount'] ), 'post_type' => 'all_books', ); // 修改查询条件:获取所有bookdate字段不为空的图书 $the_query = Books::search() ->where('bookdate', 'IS NOT NULL') // 确保字段存在值 ->where('bookdate', '!=', ''); // 排除空字符串的情况 if ( $the_query->have_posts() ) { $ret = '<div id="entity-items">'; $i = 0; while ( $the_query->have_posts() ) { if( $i < $a['amount'] ) { $i++; $the_query->the_post(); $ret .= Books::template('item')->cache(); } } $ret .= '</div>'; // 把闭合标签移到if块内,避免无结果时生成空div } else { // 可选:无符合条件图书时的提示文本,可按需修改或删除 $ret = '<p>No books with a valid bookdate found.</p>'; } wp_reset_postdata(); return $ret; } add_shortcode( 'open_books', 'open_books' );
关键改动说明
- 查询逻辑优化:用两个
where条件确保bookdate既不是NULL也不是空字符串,覆盖所有有有效日期值的图书。如果你的Books::search()类支持whereNotNull()方法,也可以简化成->whereNotNull('bookdate'),效果一致。 - 修复空标签问题:原来的代码无论有没有查询结果都会输出闭合的
</div>,现在把这行移到if块内,避免无图书时生成空的容器标签。 - 新增无结果提示:添加
else块处理无匹配图书的场景,提升用户体验,你可以根据需求自定义提示内容。 - 保留原有功能:依然支持通过
amount参数控制显示数量(默认5本),原有的模板渲染和缓存逻辑保持不变。
内容的提问来源于stack exchange,提问作者Maanstraat
相关产品推荐
相关产品推荐

