PHPで投稿タイトルを切り捨てる方法を学びたいですか?
切り捨て、または短縮することで、サイト全体のブログ投稿タイトルの長さをコントロールすることができます。WordPressのテーマによっては、テーマがサポートしているよりも短いタイトルを表示したい場合があります。
この投稿では、WordPressで投稿タイトルを切り捨てる方法を紹介する。
なぜWordPressでPHPを使って投稿タイトルを切り捨てるのか?
WordPressの投稿タイトルをPHPで切り詰めると、投稿タイトルの長さとサイトでの表示方法をよりコントロールできるようになります。
例えば、WordPressブログのデザインを崩さないように、ホームページ上の長い投稿タイトルをカットしたいかもしれない。
注: ブログ投稿をSEOに最適化するために投稿タイトルを短くしたいユーザーもいます。この場合、投稿タイトルを短くする必要はありません。代わりに、WordPressのSEOプラグインを使ってタイトルタグを短くするだけです。
SEOプラグインを使えば、検索結果ページ用のカスタムSEOタイトルを作成できる一方で、サイト訪問者用の投稿タイトルを長く保つことができる。
詳しくは、All In One SEOを正しく設定する方法についての究極のガイドをご覧ください。
ということで、2つの異なる方法を使用して、サイト上でWordPressの投稿タイトルを切り詰める方法を紹介しましょう:
方法1:WordPressの投稿タイトルをWordPressの関数で切り捨てる
WordPressで投稿タイトルを切り詰める最も簡単な方法は、WordPressファイルにPHPコードを追加することです。WordPressでコードをコピー&ペーストする方法をご覧ください。
多くのチュートリアルでは、テーマのfunctions.phpファイルに直接コードを追加するように書かれています。しかし、間違いがあるとWordPressのさまざまなエラーを引き起こしたり、サイトを壊してしまう可能性があります。
そのため、WordPressでカスタマイザーコードを追加する方法のガイドに従って、代わりに無料のWPCodeプラグインを使用することをお勧めします。
まず、WPCode無料プラグインをインストールし、有効化する必要があります。WordPressプラグインのインストール方法については、こちらをご覧ください。
有効化したら、管理サイドバーからCode Snippets ” + Add Snippetを選択します。次に、「カスタムコードを追加(新規スニペット)」オプションにマウスオーバーし、表示される「スニペットを使用」ボタンをクリックします。
新しいページが開きますので、そこにスニペットのタイトルを入力し、コードを追加してください。
以下のコードをWPCodeのコード・プレビュー・ペインにコピー&ペーストするだけです。
function max_title_length( $title ) {
$max = 35;
if( strlen( $title ) > $max ) {
return substr( $title, 0, $max ). " …";
} else {
return $title;
}
}
add_filter( 'the_title', 'max_title_length');
このコードはWordPressの投稿ループ内で実行され、ブログ投稿のタイトルを’35’文字に短縮します。タイトルの長さを変更するには、$max
変数にお好みのタイトルの長さを設定するだけです。
次に、コードタイプのドロップダウン・メニューから「PHP Snippet」を選択する必要がある。
最後に、有効化設定をオンにして、「スニペットを保存」ボタンをクリックしてスニペットを保存します。
コードスニペットが有効化されると、WordPressサイト上のどこに表示されても、ブログ投稿のタイトルが短縮されます。
方法2:WordPressのテーマファイルを変更して、PHPでWordPressの投稿タイトルを切り詰める
WordPressの投稿タイトルを切り詰めるもう一つの方法は、WordPressのテーマファイルに直接コードを追加することです。
この方法では、タイトルを短くする場所をよりコントロールすることができます。例えば、ホームページ上ではタイトルをカットし、ブログ投稿日ではタイトルを表示したい場合などです。
そのためには、ブログ投稿のタイトルを切り捨てたいWordPressテーマファイルに直接PHPコードを追加する必要があります。
例えば、以下のコードスニペットをindex.php
ファイルに追加し、WordPress投稿ループ内の既存のthe_title
タグを置き換えることで、サイト全体のタイトルの長さを変更することができます:
<a href="<?php the_permalink() ?>">
<?php
$thetitle = $post->post_title; /* or you can use get_the_title() */
$getlength = strlen($thetitle);
$thelength = 25;
echo substr($thetitle, 0, $thelength);
if ($getlength > $thelength) echo "...";
?>
</a>
このコードは投稿タイトルの長さを25文字にセットします。もしタイトルの長さが25文字より長い場合は、25文字の後にタイトルをカットし、最後に省略記号’…’を追加します。
サイトの文字数を変更するには、$thelength
変数をお好みの文字数に変更するだけです。
コードを追加してファイルを保存したら、WordPressホスティングアカウントのテーマディレクトリにアップロードする必要があります。
FTPクライアントまたはWordPressホスティングコントロールパネルのファイルマネージャツールを使用してこれを行うことができます。FTPを使用したことがない場合は、FTPを使用してWordPressにファイルをアップロードする方法のガイドをご覧ください。
コードを追加すると、投稿タイトルは設定した文字数で切り捨てられます。
プロからのアドバイス:方法2を使用した場合、テーマを新しいバージョンに更新すると、これらの変更が失われます。これを避けるには、カスタマイズを失うことなくWordPressテーマを更新する方法についてのガイドを参照してください。
この投稿が、PHPでWordPressの投稿タイトルを切り捨てる方法を学ぶのにお役に立てば幸いです。また、優れたブログ投稿の書き方や、WordPressのスキーママークアッププラグインのエキスパートピックもご覧ください。
If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.
Syed Balkhi
Hey WPBeginner readers,
Did you know you can win exciting prizes by commenting on WPBeginner?
Every month, our top blog commenters will win HUGE rewards, including premium WordPress plugin licenses and cash prizes.
You can get more details about the contest from here.
Start sharing your thoughts below to stand a chance to win!
Achintha
Hey There is a wordpress function for limit words. Better to use that.
http://codex.wordpress.org/Function_Reference/wp_trim_words
dustinporchia
This is golden!….Thanks wpbeginner!
adm_mnz
If you use mb_substr there is a parameter for encoding.
http://php.net/manual/en/function.mb-substr.php
Junaid
Sweet! was just looking for a clients project
Marco
Does anybody know how the link title of previous_post_link(); could be truncated?
thanks
Brow
Thanks this worked perfectly! I didn’t want to end up using a plugin just to do this and was happy your code cut down the titles properly.
Thanks again!
Joey Figaro
Hey there – thanks for writing this up! I happened to stumble upon another example of how to achieve this and it seemed a lot more simple, so I will share it with you and see what you think.
functions.php:
function new_excerpt_length($length) {
return 100;
}
add_filter(‘excerpt_length’, ‘new_excerpt_length’);
Editorial Staff
These are two entirely different concepts…. The one you recommend is for post excerpts whereas the one we are talking about is for Post Titles.
管理者
Joey Figaro
Wow, that’s embarrassing.
Lena
Hi!
This doesn’t work if you use other languages than english. My swedish titel looks awful because the code doesn’t translate å ä and ö comparing to the default code. Any suggestions of what I have to do? This is a good trick and i want to use it.
Kindly Lillan
Editorial Staff
Hmm… that does sound like a serious issue. Wondering if you can specify the language via PHP, so it counts characters in that instead of english.
管理者
Alex
You might wanna try to specify a different charset, check Latin1 or utf8 i think they contain those chars as well.. I had some similar issues recently since my first language is german
Editorial Staff
Thank you for helping out Alex
Ben Kulbertis
Thanks for the Trackback!
Editorial Staff
We appreciate your work for the community. Thanks for the nice snippet
管理者
Navjot Singh
One Suggestion, this type of code should be included in functions.php and not index.php. You can use conditional tags to restrict the code to any page you want whether its the homepage or any other page where you want.
Editorial Staff
This is just for specific areas… But yes, it can be customized and placed in functions.php
管理者
Thomas Scholz
Don’t use strlen(). Use mb_strlen() or strlen(utf8_decode($str)) or you risk to truncate the string inside of a multi-byte character. The same applies to mb_substr().
Oh, and an ellipsis is one character: …
snipsley
Thanks!! mb_strlen() a mb_substr solved my encoding problem. I’ve been looking for this for hours!
Lena Backstedt
BIG tnx!
mb_strlen() also seems to work for the swedish language (so far I can see)