WordPress

WordPress コメント投稿に hook する filter

コメントの投稿に対して、何かしたい時、preprocess_commentをhookします。

例えば文字コードを変更したい場合

function preprocess_comment_conv( $commentdata ) {

  mb_convert_variables( 'UTF-8' , 'EUC-JP' , $commentdata );

  return $commentdata;
}
add_filter( 'preprocess_comment' , 'preprocess_comment_conv' ); 

$commentdata には、コメントや名前等がセットされてパラメーターとして受け取れます。

Source: Plugin API/Filter Reference/preprocess comment « WordPress Codex

WordPress の表示速度を早くする(イメージ編)

WordPressの表示速度がやたら遅いので、まずは画像のりサイズをすることにしました。
他には、jsなど余計なリソース読み込んでいることも原因ですがまずはリサイズをしてみました。

インストールしたプラグイン

WordPress › EWWW Image Optimizer « WordPress Plugins.

リサイズ実行

管理画面から、アップロードしたイメージ、テーマファイルで使われているイメージをリサイズしました。
新たにアップロードするイメージについては、自動的にリサイズされるようになります。
Bulk_Optimize_‹_suusuke_-_blog_—_WordPress

リサイズ前

Latest_Performance_Report_for__http___blog_suusuke_info____GTmetrix

リサイズ後

Latest_Performance_Report_for__http___blog_suusuke_info____GTmetrix 2

スマートフォンでアクセスした際に W3 Total Cache が原因で WPtouch が有効にならない対応

タイトル通りですが、スマートフォンでアクセスしてもキャッシュされたPCのページが表示されていたので気付きました。

W3 Total Cache の設定で
[Performance]->[User Agent Groups]から、[hige]と[low]というユーザーエージェントグループが設定されているので、Enabledをチェックして有効にすると、ユーザーエージェントグループに設定されているユーザーエージェントからのアクセスの場合、キャッシュを表示しないようになります。

User_Agent_Groups___W3_Total_Cache_‹_suusuke_-_blog_—_WordPress

User_Agent_Groups___W3_Total_Cache_‹_suusuke_-_blog_—_WordPress 2

WordPressの管理画面にBasic認証を設定する際のhtaccessの書き方

.htaccessでBasic認証設定をした場合、WordPressの予約投稿に失敗したり、Flashアップローダーが正常に動作しなかったりするので、.htaccessに予約投稿やFlashアップローダーのプログラムを除外するように記述する。

User:Hakre/Htaccess Auth Excludes « WordPress Codex.


AuthName "Input ID & Password"
AuthType Basic
AuthUserFile /home/blog/.htpasswd
Require valid-user

# Exclude the file upload and WP CRON scripts from authentication
<FilesMatch "(async-upload\.php|wp-cron\.php|xmlrpc\.php)$">
    Satisfy Any
    Order allow,deny
    Allow from all
    Deny from none
</FilesMatch>

WordPressの管理画面のセキュリティを高めるプラグイン

自分のブログは最低限のセキュリティ対策はしているつもりでしたが、仕事で管理しているWordPressのサイトにバックドアが仕込まれていて、実害は無かったもののヒヤヒヤしたので、さらにセキュリティを高めるべくプラグインを導入しました。

Crazy Bone (狂骨)

WordPress › Crazy Bone « WordPress Plugins.

ログインが実行されたログ(IPやユーザー名等)の取得ができるプラグイン。
設定は特に無く、管理画面の[ユーザー]->[ログイン履歴]でログの確認ができる。
導入してみたら、大したアクセスのないこのブログでも、結構アタック来ててビックリしました。

ログイン履歴_‹_suusuke_-_blog_—_WordPress

Simple Login Lockdown

WordPress › Simple Login Lockdown « WordPress Plugins.

ログインするときのIDやパスワードの入力を間違えた場合に、ログインできなくすることができるプラグイン。
設定画面から、ログインチャレンジ回数、ログインできなくする時間を設定できる。
表示設定_‹_suusuke_-_blog_—_WordPress
実際に、指定したチャレンジ回数ログインに失敗すると、以下のようになって、ログインできなくなる。
Too_many_login_attemps

セキュリティに対して、認識が甘かったなと痛感した出来事でした。

WordPressのバージョンアップでサイトが表示できなくなった場合の対処

何気なくWordPressのサイトをバージョンアップしたらサイトが表示できなくなってしまいました。
バックアップから元に戻そうかとも思ったのですが、一応エラーログを確認してみると

61.194.140.210 - - [12/Oct/2012:21:36:54 +0900] "GET / HTTP/1.1" 500 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7;
 rv:16.0) Gecko/20100101 Firefox/16.0"

HTTP 500 内部サーバーエラーになっていました。

バージョンアップにより対応してないプラグインがあるため、どうやらエラーになっているらしい。

  1. プラグインディレクトリを退避・プラグインディレクトリを空にする
  2. WordPressの管理画面にログイン
  3. 退避したディレクトリを元に戻す
  4. 管理画面から一つ一つプラグインを有効化し対応してないプラグインを特定する
[root@suusuke ~]# cd /home/blog/public_html/
[root@suusuke public_html]# mkdir wp-content/20121012-plugins
[root@suusuke public_html]# \cp -Rpf wp-content/plugins/* wp-content/20121012-plugins/
[root@suusuke public_html]# rm -Rf wp-content/plugins/*
[root@suusuke public_html]# \cp -Rpf wp-content/20121012-plugins/ wp-content/20121012-plugins/

という順序で解決しました。

WordPressをGoArunaにバックアップ

バックアップする必要もないと思ってたので今までしてなかったのですが、折角なのでバックアップをとることにしました。
Serversmanのvpsを借りてるのですが、そこにバックアップをとってもあんまり意味ないので、GoArunaというオンラインストレージサービスにバックアップをとるようにします。

メール添付でファイルを送れるという機能があるのでGoArunaにしました。

目次

  • GoArunaアカウント作成・設定
  • DBバックアップ
  • WordPressファイルバックアップ

GoArunaアカウント作成・設定

GoAruna.

サイトからアカウントします。
[マイページ]->[受信トレイ] から”メールでアップロード”の”有効にする”をクリックします。
すると、アップロード用のメールアドレスが表示されます。

DBバックアップ

DBのバックアップにはWP-DBManagerプラグインを使用します。

WordPress › WP-DBManager « WordPress Plugins.

ファイルをダウンロードして、プラグインフォルダにアップロードするか、管理画面からzipファイルをアップロードしてインストールします。
アクセス権を設定するため、wp-dbmanager 配下にある、htaccess.txt を wp-content/backup-db に .htaccess として移動します。

[root@suusuke ~]# cp plugins/wp-dbmanager/htaccess.txt backup-db/.htaccess
[root@suusuke ~]# chown apache.apache backup-db/.htaccess 

WordPress管理画面メニューから、データベース > DB Options を選択します。

設定画面の [Automatic Scheduling] 欄にメールアドレスを設定する項目があるのでそこに設定します。

今回は、一日一回バックアップをとって、三日に一回最適化、リペアはしないという設定にしました。

WordPressファイルバックアップ

DBだけバックアップをとっても、完全に復元できないので WordPress Backup (by BTE) をつかって、画像、プラグイン、テーマもバックアップを取ります。

» WordPress Backup.

ファイルをダウンロードして、プラグインフォルダにアップロードするか、管理画面からzipファイルをアップロードしてインストールします。

設定 メニュー > WordPress Backup から設定画面で、GoArunaのアップロード用メールアドレスを入力します。

これで、日次バックアップがとれるようになりました。

最後に

Please add an .htaccess file to the backup folder (see here).

とあるので、バックアップディレクトリに.htaccessでWordpress管理画面にログインしてないとバックアップファイルがダウンロードできないように設定して終了です。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} .*bte-wb/.*
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule . - [R=403,L]
Options All -Indexes

WordPress 高速化

目次

  • APC
  • WP Super Cache
  • MySQLクエリキャッシュ

APC

PHPの中間コードをキャッシュしてくれるもの。多分一番有名。

APC(Alternative PHP Cache)再び – Do You PHP?.

[root@suusuke ~]# yum --enablerepo=remi install php-pear ← 対象サーバにpearが入ってなかったので
[root@suusuke ~]# yum install gcc gcc-c++ ← 対象サーバにgccが入ってなかったので
[root@suusuke ~]# pecl install APC

WP Super Cache

WordPressのページをキャッシュしてくれるプラグイン。

WordPress › WP Super Cache « WordPress Plugins.

MySQLのクエリキャッシュ

MySQLのクエリをキャッシュするようにしてDBアクセスを減らす。
ブログの閲覧は殆どがSELECTなので有効。

MySQLでクエリキャッシュする方法.

mysql> set global query_cache_size=41984;
Query OK, 0 rows affected (0.24 sec)

mysql> show variables like 'query_cache_size';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| query_cache_size | 41984 |
+------------------+-------+
1 row in set (0.00 sec)

WordPress 複数のカテゴリーを表示する

複数のカテゴリー、例えば特定のジャンルとエリアとかで検索したいと言った場合があると思います。
カテゴリーを親子関係にしておけば結構簡単に検索は出来るのですが、そうしたくない場合もあると思います。(わがままw)

query_postsのパラメーターに

<?php query_posts('cat=2,3'); ?>

とやればいいと思ったのですが、これだとカテゴリーIDが2または3のものと言うことになります。つまりOR検索。

AND検索したい場合は

<?php query_posts(array('category__and'=>array(2,3))); ?>

このように書けば、カテゴリーIDが2かつ3のものが検索できます。

query_postsのパラメーターは配列で渡すやり方と、文字列で渡すやり方があるのですがcategory__andは配列だけのようです。
なので、category__and使う場合は他のorderとかもキー&バリューで渡す形になります。

参考サイト:WordPressの基本操作と使い方