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

WordPress如何仅当get_posts返回结果时才添加仪表盘metabox

解决方案

实现逻辑

你不需要调整add_action的挂载时机,只要把数据查询逻辑提前到小部件注册函数内做判断即可:

  • 正常挂载wp_dashboard_setup钩子触发小部件注册逻辑
  • 注册函数内优先查询是否存在使用了对应Gutenberg区块的文章/页面
  • 仅当查询结果不为空时,才调用add_meta_box创建仪表盘元框,没有符合条件的内容时不会生成多余的空小部件

修改后完整代码

/**
 * Pardot Widget for Dashboard
 */
function pardot_dashboard_widget()
{
    // 提前执行数据查询
    $args = [
        's'         => '<!-- wp:acf/pardot-form ',
        'sentence'  => 1,
        'post_type' => [
            'post',
            'page'
        ],
        'posts_per_page' => 1, // 只需要判断是否存在,查1条即可提升性能
        'no_found_rows' => true, // 关闭分页计算进一步优化性能
    ];
    $pardot_form_query = get_posts($args);
    
    // 仅当有符合条件的内容时才注册元框
    if ($pardot_form_query) {
        add_meta_box(
            'pardot_dashboard_meta_box',
            esc_html__( 'Pardot Form Locations', 'wporg' ),
            'pardot_dashboard_stats',
            'dashboard',
            'side', 
            'high'
        );
    }
}
add_action('wp_dashboard_setup', 'pardot_dashboard_widget');

function pardot_dashboard_stats()
{
    // 这里再执行完整查询输出内容即可,不需要再处理空状态
    $args = [
        's'         => '<!-- wp:acf/pardot-form ',
        'sentence'  => 1,
        'post_type' => [
            'post',
            'page'
        ],
    ];
    $pardot_form_query = get_posts($args);
    
    // 输出内容逻辑示例:遍历展示所有符合条件的文章
    foreach ($pardot_form_query as $post) {
        echo '<p><a href="'. get_edit_post_link($post->ID) .'">'. esc_html($post->post_title) .'</a></p>';
    }
}

如果需要进一步优化性能,也可以把第一次查询的结果存到全局变量或者静态变量中,避免二次查询。

内容的提问来源于stack exchange,提问作者user16645285

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:09:03