閲覧数:280 views
あなたが今、読んでいるカテゴリー:
wordpress
wordpressの話というかは、PHPや文字コードのお話です。
このブログは海外の方が作成されたテーマ「sixteen」というテーマをカスタマイズして作成しています。
https://wordpress.org/themes/sixteen
ホームのタイトルを短くするコードは最初から実装されていたのですが、タイトル文字が化ける場合がありました。このテーマ、どうやら日本語は考慮していないみたいです。
なぜこのような事が発生するのか?
文字コードやマルチバイト文字とはなんたるかを説明しだすと長文になってしまうので簡単に説明します。
このタイトルを短くするコードで使われている関数「strlen」と「substr」は日本語に対応していないです。
1 2 3 4 5 6 |
/* content-home.php 20行目あたり */ <?php if (strlen(get_the_title()) >= 85) { ?> <h1 class="entry-title"><a href="<?php the_permalink(); ?>" data-title="<?php the_title(); ?>" rel="bookmark"> <?php echo substr(get_the_title(), 0, 84)."..."; } |
対応方法
接頭辞(これをプレフィックスといいます)がmb_の関数を使用してください。今回であれば、
- strlen → mb_strlen
- substr → mb_substr
です。文字列のカウントも実際の日本語の文字数でカウントしてください。もし28文字で表示したい場合は以下のようになります。
1 2 3 4 5 6 |
/* content-home.php 20行目あたり */ <?php if (mb_strlen(get_the_title()) >= 29) { ?> <h3 class="entry-title"><a href="<?php the_permalink(); ?>" data-title="<?php the_title(); ?>" rel="bookmark"> <?php echo mb_substr(get_the_title(), 0, 28)."…"; } |
これで、正しく表示されるようになります。
さいごに
日本の方が作成されたテーマはマルチバイト対応は行われている場合がほとんどかと思いますが、海外のテーマだとそうではないテーマもあります。文字が化けてしまって困っている方は文字列判定を行っている関数の使用箇所を一度見直してみてはいかがでしょうか。
参考になりましたら幸いです。