You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:14:43