こんにちは!ウェブサバイバー運営のYeah-Manです!
さて、今回はWordPressについて覚えたてで、PHPも学習したての方を対象に、『ちょっとしたことに使えるPHPの処理やWordPressの関数』などについて、紹介したいと思います!
『こんなことしたいなー』というのがドンピシャあったら嬉しいなと思います!それでは順に紹介していきたいと思います!いってみよ〜!
この記事の目次
WordPress管理画面へSVGのアップロードを許可したい
新しいものを上へ追記していきます。WordPress管理画面のメディアですが、通常ですとセキュリティ観念からSVGのアップロードが許可されていません。ですが、アクションフックを使ってMIMEtypeを追加することで、許可することが可能になります。以下コードをfunctions.phpへ記入ください。
function add_file_types_to_uploads( $file_types ) {
$new_filetypes = array();
$new_filetypes['svg'] = 'image/svg+xml';
$file_types = array_merge( $file_types, $new_filetypes );
return $file_types;
}
add_action( 'upload_mimes', 'add_file_types_to_uploads' );
文字数制限の処理(文字を丸める)
ここではいわゆる『文字数制限処理』についてご紹介したいと思います。WordPressの抜粋文( the_excerpt() / get_the_excerpt() )などで文字数制限をかけられることはご存知の方が多いですが、例えばget_the_titleなんかで文字数制限をかけたい場合はどうすればいいんでしょう?
そんな時はphpの関数で『mt_strimwidth()』という関数が手っ取り早くて楽です。
$title = get_the_title();
$_title = mb_strimwidth($title, 0, 30, '…', 'UTF-8'); //第1引数に対象文字列、第2引数に開始文字数、第3引数に省略する文字数、第4引数に省略記号、第5引数に文字コード
echo $_title;
上記サンプルでは『get_the_title()』でタイトルを取得し、取得したいタイトルを文字の幅『30』を超えた時点で『…』で省略するという処理になります。
『もも』が30文字入力されているタイトルなら『ももももももももももももももも…』と15文字で省略されます。
日本語など全角のマルチバイト文字は『2つ』半角文字は『1つ』でカウントされるのが特徴です。このmb_srimwidth()ですがその幅のカウント方法から、半角英数などの文字がタイトルに含まれている場合に、思った通りの場所で省略されないといた問題があります。
手っ取り早く省略する際は使えますが、シビア目に省略する場合は別の方法を取る必要があります。そちらについてはまたの機会にご紹介いたします。
WordPressの管理画面から『クイック編集』を削除する方法
あまりないシチュエーションかもしれませんが、投稿記事の一覧などで表示される『クイック編集』ですが、非表示にすることが可能です。
この場合はfunctions.phpに以下を追記してください。
add_filter('post_row_actions', 'hide_quickedit'); //※※※_row_actionsで制御します。postだと投稿を意味します。
add_filter('page_row_actions', 'hide_quickedit'); //※※※_row_actionsで制御します。pageだと固定ページを意味します。
function hide_quickedit($actions)
{
unset($actions['inline hide-if-no-js']);
return $actions;
}
WordPressの管理画面で一覧画面に表示する件数を変更したい
投稿一覧や固定ページ一覧などそれぞれ一覧ページに表示する件数はfunctions.phpから変更することができます。
変更方法は以下です。
※ただし、変更すると管理画面から変更することができません。管理画面から変更する場合は管理画面の各投稿一覧、右上の表示オプションから『ページ送り』の数字を変更することで可能です。てかぶっちゃけそっちの方がいいかもですw。任意にご利用ください。
function my_edit_posts_per_page ($posts_per_page) {
return 300;
}
add_filter('edit_posts_per_page', 'my_edit_posts_per_page');
cssやJavaScrrptファイルのキャッシュを制御したい
『アレ?調整したのにブラウザに反映されない?』というケース、結構あったりしませんか?そんなときはブラウザがキャッシュして確認できないケースもしばしば。Google Chromeだと『Command + Shift + R』でスーパーリロードというやり方でキャッシュクリアしたり、ディベロッパーツールを使ってキャッシュクリア設定して読み込んだりと色々やりかたありますが、ファイルの末尾にこんな形でクエリをわたしてやることでキャッシュクリアできます!お手軽ですのでぜひいちどおためしください!
※このサンプルではstyle.cssのファイル名の後ろに『?ver=』とクエリを付与。
その後ろにphpのtime();関数を使って時刻を設定することで自動でキャッシュが取れるようにしています!
<link rel='stylesheet' id='main-css' href='/css/style.css?ver=<?php echo time();?>' type='text/css' media='all' />
同じ要領でjsも読み込むことができます。
参考にさせていただいたのはこちらのブログさんです!
ビジュアルエディタ(tinyMCE)でもキャッシュクリアしたい
表示側は先ほどの記述で可能ですが管理画面のビジュアルエディタではクリアされません。以下のように書くことで、同じ原理でキャッシュクリアができます!ぜひお試しください!
function extend_tiny_mce_before_init( $mce_init ) {
$mce_init['cache_suffix'] = 'ver='.time();
return $mce_init;
}
add_filter( 'tiny_mce_before_init', 'extend_tiny_mce_before_init' );
WordPressの管理画面にオリジナルcssを反映したい
管理画面の細かい調整が必要なとき、管理画面そのものにオリジナルのcssを反映したいと考えたりする場合、ありますよね?
そんな時は『admin_head』というフックがあるのでそれを利用して、差し込みましょう。サンプルは以下です!
add_action('admin_head', function () {
$url = home_url();
$url_css = $url . '/wp-content/themes/theme-name/management.css';
echo "
";
}, 100);
同じ要領でjsも読み込むことができます。
WordPressのビジュアルエディタにオリジナルcssを反映したい
管理画面の中のビジュアルエディタにcssを読み込ませたい時ってありますよね?そんな時に使えます。add_ediitor_style()というフックが用意されているのでそちらを利用しましょう。実際のコードは以下です。以下をfunctions.phpへ貼り付けて利用してください。
add_editor_style("※※※※※※.css");
TinyMCEAdvancedなどを利用してる場合は『editor-style.css』というファイルをテーマに設置するだけで実現可能だったりします。そちらはまた時間がある時にでも執筆できれば!よろしくお願いいたします〜
foreachで最初と最後に処理をしたい
『get_posts』などで記事を取得したとき、配列で記事を取得しますよね?そんな時はforeachで配列のデータを順に取り出すことが多いと思いますが、そのforeachの最初と最後に処理を書きたいときに使えるTipsです。元々はQiitaでたまたま見つけた処理です。以下をご参照ください!
$posts = get_posts([
"post_type" => 'post',
"posts_per_page" => 12,
]);
if ( $posts ) {
foreach ( $posts as $post) {
if ($post === reset($posts)) {
echo 'これは最初だよ';
}
if ($value === end($posts)) {
echo 'これは最後だよ';
}
}
}
公開後●日の間は新着アイコンを出力したい
せっかく書いた記事、『どうせなら目立たせたい!』という風に考える方も多いと思いますが、そんな時に役立つ処理です。
以下、ご利用ください!
//公開後3日間表示する新着アイコン判定
$icon_bool = false;
$days = 3; //ここで日数を指定
$today = date_i18n('U');
$entry = get_the_time('U');
$elapsed = date('U', ($today - $entry)) / 86400;
if ($days > $elapsed) {
$icon_bool = true; //最後ここでフラグを立てる
}
//フラグの有無で表示を切り替え
if ($icon_bool) {
//ここに処理を記入
}
随時思いつき次第追記していきます!
ここまでざーっと思いつく限りの処理を紹介してきました。
『もう知ってるよ』ということもあると思いますが、こういったTipsをまとめた記事があると、なにかと便利だと思いますので、随時思いつき次第、更新していきたいと思います!それでは今日はこの辺で!ありがとうございましたー!