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

WordPress中实现数据库人员循环生成按钮的方法

问题解决:循环生成所有人员按钮的WordPress短代码修改

原代码的问题在于:你在foreach循环里只是不断覆盖$kantoor1变量,最终只会保留最后一条数据的值;而且返回的HTML里只写了一次按钮元素,自然只能显示最后一个人员。

修改思路:

  • 初始化一个字符串变量存储所有按钮的HTML代码
  • 在循环内逐个拼接每个人员的按钮代码
  • 最后把拼接好的按钮代码插入到对应的HTML容器中

修改后的完整代码:

<?php 
function custom_dbnew_link()
{
    global $wpdb;
    $table_name = $wpdb->prefix . 'personeellijst';
    // 只查询需要的naam字段,比SELECT *更高效
    $retrieve_data = $wpdb->get_results( "SELECT naam FROM $table_name" );
    
    // 初始化存储按钮的变量
    $buttons_html = '';
    
    foreach ($retrieve_data as $retrieved_data){ 
        $naam = $retrieved_data->naam;
        // 把每个人员的按钮代码拼接到变量里
        $buttons_html .= '
        <button onclick="myFunction()" id="'. esc_attr($naam) .'" class="pasfotoselect">
            <div class="namediv leeg">
                <img decoding="async" src="/wp-content/personeel/pasfoto/'. esc_attr($naam) .'.jpg" class="personeelpasfoto" alt="Foto van '. esc_attr($naam) .'">
                <div class="pername">'. esc_html($naam) .'</div>
            </div>
        </button>';
    }   

    // 处理没有人员数据的情况
    if (empty($buttons_html)) {
        $buttons_html = '<p>暂无人员数据</p>';
    }

    return '
    <div id="roosterhtml" style="display:none;">
        <div id="testnav" class="navfoto">
            <div class="Personeel">Personeel fotos voor <div class="perfirstname" id="roosterfotos"></div></div>
            <div id="closefoto" class="closefoto">opslaan</div>
        </div>
        <div id="testnavcopy" style="display:none;" class="navfoto">
            <div class="Personeel">Personeel fotos voor <div class="perfirstname" id="roosterfotos2"></div></div>
            <div id="closefoto2" class="closefoto">opslaan</div>
        </div>
        <div class="fotobuttons2">
            <div class="buttonsarchief">
                <div id="newmembersbutton" class="buttonmembers active">In dienst</div>
                <div id="oldmembersbutton" class="buttonmembers">Uit Dienst (Inval)</div>
                <div id="addmembersbutton" class="buttonmembers">Nieuwe personeel Toevoegen</div>
            </div>
        </div>
        <div id="newmembers" class="fotobuttons">
            '. $buttons_html .'
        </div>
    </div>
    <script src="/wp-content/uploads/personeeldatabase.js"></script>
    ';
}
add_shortcode('custom_dbnew', 'custom_dbnew_link');
?>

额外优化点:

  • 使用esc_attr()和esc_html()对数据库取出的姓名进行转义,避免XSS安全风险
  • 把SQL查询改成只获取naam字段,减少不必要的数据读取
  • 添加了空数据的处理逻辑,避免容器为空

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:05:40