求助:如何在WordPress中用PHP和HTML按连字符拆分文章标题
解决WordPress标题按连字符拆分的问题
原代码的问题
- 分隔符不统一:第一次调用
strtok用的是短横'-',第二次却用了长横'–',直接导致拆分逻辑失效 - strtok的适配性差:
strtok按单个字符分割,若标题里有多个短横会拆分出多段,还没法处理连字符前后的空格,满足不了你只拆成歌手、歌曲名两部分的需求
修正后的代码
改用explode()替代strtok,它能精准匹配包含空格的完整分隔符,还能限制仅拆分一次,更适配你的场景:
<?php global $my_query; $post_number = ($my_query->current_post + 1); $zero_padding = str_pad($post_number, 2, '0', STR_PAD_LEFT); ?> <?php $title = get_the_title(); // 按"空格-空格"的格式拆分标题,仅拆分1次得到两部分 $title_parts = explode(' - ', $title, 2); // 兼容标题格式不符合的情况,避免报错 $artist = isset($title_parts[0]) ? trim($title_parts[0]) : $title; $song = isset($title_parts[1]) ? trim($title_parts[1]) : ''; ?> <div class="col center-elements-top10"> <div class="img-top10" style="background-image: url(<?php the_post_thumbnail_url() ?>)!important;"></div> <div class="div-titles"> <h5 class="number-top10"><?php echo $zero_padding; ?></h5> <div> <h6 class="mt-2 titles-top10"><?php echo $artist; ?></h6> <h5 class="mt-2 titles-top10"><?php echo $song; ?></h5> </div> </div>
关键说明
explode(' - ', $title, 2):第一个参数对应你标题里实际的分隔符(空格+短横+空格),第三个参数2限制仅拆分一次,确保不管标题里有没有其他短横,都只会得到歌手和歌曲名两部分trim():去除拆分后内容前后的多余空格,避免显示时出现留白isset()判断:如果标题没有符合要求的分隔符,会直接把完整标题作为歌手名,歌曲名留空,避免页面报错
内容的提问来源于stack exchange,提问作者Daniel Martins
相关产品推荐
相关产品推荐

