いざという時に助かるWordPressカスタマイズ小技集
WordPressで構築されたサイトをリニューアルした時に気づいたこと、障害に対する解決策などを備忘録として書いておきます。もし今後以下のような不具合がでたらすぐに解決できるかもしれません。ちょっとしたことですけど知っておくと便利です。
WordPress カスタマイズ
CSSを変更したら自動で最新のCSSを参照させる
これはケースバイケースですが、キャッシュの設定をしていると、ブラウザがCSSキャッシュを保持するので修正前のファイルを参照してしまうことがあります。
CSSの変更を先方のPCで確実に反映させたい、公開中であればユーザーのローカルにキャッシュを残させたくない時は、ファイルの最終更新時刻を取得するfiletime
というのがありますので、これをCSSの末尾に付与することで、CSSを変更するたび拡張子の後に毎回違うパラメータが付与され最新のCSSを参照するようになります。
header.phpに以下を記述。
<link href="<?php bloginfo('stylesheet_url'); echo '?' . filemtime( get_stylesheet_directory() . '/style.css'); ?>" rel="stylesheet" type="text/css">
または
<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); echo '?' . filemtime( get_stylesheet_directory() . '/style.css'); ?>" type="text/css" media="screen" />
Prevent CSS Caching | CSS-Tricks
予約投稿などの自動実行系が失敗するのを解決
予約投稿が失敗したり、SNS Count Cacheなどの自動実行系プラグインが動かない、feedlyの通知遅延などの障害が発生したことがあります。
だいたいそんな時は「object-cache.php」がサーバに残っていたりするのでサーバを調べて削除するとよいです。
予約投稿の失敗の原因のほとんどは、キャッシュ系プラグイン(WP Super Cacheとか)の残骸など。キャッシュ系プラグインを削除しても、残骸がサーバーに残っていると予約投稿やcron系が失敗に繋がることがあります。
サーバ移行する際は、旧サーバのDBと画像・新テーマ以外は持ち越さないようにした方がよいですね。予約投稿や自動実行系のプラグインが動かない時は、wp-config.phpの末尾に代替 cronの記述を追記。
define('ALTERNATE_WP_CRON', true);
- WordPress予約投稿に失敗する原因はwp-content/object-cache.phpだった | urashita.com
- wp-config.php の編集 - WordPress Codex 日本語版
※予約投稿のテストはコピーサイトを一時的に作ってテストして下さい、その際SNS連携しないように設定すること。コピーサイトはテスト後すぐに消しましょう。
画像アップロード時に自動で付与されるリンクを消す
preg_replace
でaタグの置換を行います。function.phpに以下を追加。
add_filter( 'the_content', 'attachment_image_link_remove_filter' ); function attachment_image_link_remove_filter( $content ) { $content = preg_replace( array('{<a(.*?)(wp-att|wp-content/uploads)[^>]*><img}', '{ wp-image-[0-9]*" /></a>}'), array('<img','" />'), $content ); return $content; }
サイト内検索のトラッキングを設定
WordPressであれば、サイト内検索ボックスでユーザーが入力したキーワードを拾うことができるので設定しておきましょう。GoogleAnalyticsで、アナリティクス設定>ビュー設定>サイト内検索のトラッキングをオンにします。
クエリパラメータの中に「s」と入れて、「URLからクエリパラメータを削除」にチェックを入れて保存。
複数の画像をアップロードしたら「データベース接続確立エラー」となる
WP管理画面内から画像をアップロードしたら「HTTPエラー」のメッセージが出たあと、「データベース接続確立エラー」となって、真っ白になったことがありました。最初mysql側を疑いましたが結局nginxのアップロード制限だったというオチ。
nginxはデフォルトで1Mまでのアップロード制限がありエラーがでます。nginx.confのclient_max_body_size
の部分を変更。
client_max_body_size 1g
数枚の画像ではエラーが出なかったので最初は気づきませんでした。もし、nginxを使っているなら上記のようにアップロード制限サイズの設定をしておきましょう。
以上、知っておくと便利なちょっとしたカスタマイズ小技でした。
スポンサード リンク
Leave a Comment