MODX リソース更新時などでAPC Cache/OPcacheをクリアする

APCやOPcacheをインストールしているサーバでMODXを動かしていると、稀に更新が画面に反映されなくて難儀したので、リソースやチャンクの更新時にキャッシュをクリアする方法を検索したもののよくわからず、下記の作業をやってみたら出来たっぽいので書き留めておきます。

  • プラグインを作成
    • プラグイン名: (適当)
    • プラグインコード:
      if(function_exists('opcache_reset')) opcache_reset();
      if(function_exists('apc_clear_cache')) apc_clear_cache();
    • チェックを入れるシステムイベント:
      • OnSiteRefresh
      • OnChunkFormDelete
      • OnChunkFormSave
      • OnDocFormSave
      • OnDocUnPublished
      • OnEmptyTrash
      • OnSnipFormDelete
      • OnSnipFormSave
      • OnTVFormDelete
      • OnTVFormSave
      • OnTempFormDelete
      • OnTempFormSave

リソースやチャンクなどを更新すると、Cached Filesがぐっと減るので、たぶんキャッシュがクリアされてるはず。


livedoor blogからWordPressへ移転する際のパーマリンクに関するメモ

ライブドアブログからWordPressに記事を移転するお仕事した際、なるべくURLを変えたくないなーと思ったのでやってみた作業メモ。

  1. 下準備
  2. WordPress側の設定
    • パーマリンク設定: /archives/%postname%.html
  3. インポート
    • WordPressは、標準でMT形式のインポート機能を追加できる。[ツール > インポート]
    • 環境によっては非常に時間がかかる。
      取込み試験を行ったさくらスタンダードでは、1件につき5秒くらい。ローカル環境では、30分で300件ほど。
    • 取り込んだ後、URLが従前と同じ形式が確認してみる。
  4. ライブドアブログ側のコメントを閉じる。
  5. DNS設定を変更し、移転完了。

パーマリンクの様式をなるべく引き継いだ場合、ひとつ面倒くさくなるのがスラッグの設定。
インポート時、ライブドアブログの記事IDを post_id にできないかといろいろやってみたのですがうまくゆかず、通常通り postname に収めることになったのですが、パーマリンクを post_id ではなく postname にすると、新規投稿を登録するたびにスラッグを設定する必要が生じます。
特に何も考えないと、今まで記事IDだった短いURLが、タイトルから再構成された長ーいものになってしまいます。しかし毎回固有IDっぽいのを割り当てるのも非常にめんどい。
スラッグへIDっぽい文字列を自動で割り当てられたら便利なので、下記サイトのコードを参考にしました。

WordPress の投稿スラッグを自動的に生成する | Simple Colors
http://www.warna.info/archives/2317/

私の場合はこんな塩梅に変更して functions.php に追記しました。

function auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
	if ( $post_type == 'post' && $post_ID > 0 ) {
		$slug = 60000000 + intval($post_ID);
	}
	return $slug;
}
add_filter( 'wp_unique_post_slug', 'auto_post_slug', 10, 4  );

$post_type == ‘post’ の部分を入れておかないと、固定ページほかあらゆる投稿タイプでスラッグが自動入力されてしまいます。
投稿タイプがpostの場合、WordPressの記事IDに60000000を足した文字列をスラッグに登録します。
60000000は適当です。今現在のライブドアブログ側記事IDが52000000あたりなので、キリの言い数字でスタートすれば分かりやすいかなというふわっとした理由によるものです。
ライブドアブログ側での最終更新の記事IDにちょっと足した数値でも良いでしょう。

記事インポート時はスルーしたいため、 $post_ID > 0 も加えました。
インポート時、wp_insert_post() が動く際には記事IDが確定していないため、$post_idは 0 のままこのフィルタに渡されます。こうしておくとインポート時にはスルーされるようになります(多分)

以上、参考になれば幸いです。