CMSとしてMovableTypeを使用する場合を想定します。
記事として扱われる情報は、外部にお知らせする情報(ニュースリリースなど)と、内部で完結する情報(メモ書きなど)に大きく分けることができます。
ここでUpdatePingの扱いが問題になります。
内部向けの情報はUpdatePingは必要無いことがほとんどです。
しかし現在のMovabletypeの仕様では、UpdatePingはweblog内の記事に対して一律に適用されます。
つまり単一weblogのUpdatePingから見ると、情報(記事)の切り分けができないのです。
これを解決するには複数weblog(内部記事用/外部記事用)を組み合わせることによるUpdatePing競って気の切替が必要になりますが、複数weblogの連携は面倒な構築作業を必要とします(要:multiblogプラグイン)
そこでカテゴリ毎にUpdatePingの有無を設定できるCode Hackをして見ました。
Perl初挑戦なのでコードが汚いです。
...もしかしたら、すでに同種のことをやっている人がいるかも。
[仕様]
・Local Site Pathにあるping_category.txtを参照し、UpdatePingを許可するCategoryを判断する。
・Categoryが設定されていない記事のUpdatePingは許可する。
・ping_category.txtが無い場合、すべての記事のUpdatePingは許可する。
・ping_category.txtはweblog毎に作成可能である。
[手順:Movabletype Ver3.15-jaで確認]
1:新規テンプレートで"ping_category.txt"を作成し、UpdatePingを許可するカテゴリの名前を列記して保存する。
2:/(MT PATH)/lib/MT.appを開く。
3:MT.appの1058行目付近のsub need_ping()を確認。
4:if (!$old_status || $old_status ne MT::Entry::RELEASE()) { ... }を以下のコードに置き換える。
if (!$old_status || $old_status ne MT::Entry::RELEASE()) { #20050317 by S.Nishikata # Category Ping Check # START use FileHandle; my %ping_category_list; my $ping_category = $blog->site_path . "/ping_category.txt"; my $fh = FileHandle->new($ping_category); my $send_updates = 1; if($fh){ $send_updates = 0; while (<$fh>) { chomp; $ping_category_list{$_} = 1; } if ($entry) { my $now_cats = $entry->categories; if($now_cats){ for my $now_cat (@$now_cats) { if($now_cat){ my $category_label = $now_cat->label; if ($ping_category_list{$category_label}) { $send_updates = 1; } } } } } } if($send_updates == 1){ my @updates = $mt->update_ping_list($blog); @list{ @updates } = (1) x @updates; $list{$mt->{cfg}->MTPingURL} = 1 if $blog && $blog->mt_update_key; } # my @updates = $mt->update_ping_list($blog); # @list{ @updates } = (1) x @updates; # $list{$mt->{cfg}->MTPingURL} = 1 if $blog && $blog->mt_update_key; #END }
5:MT.appを保存してサーバにアップロード。
※カテゴリの設定にTrackbackURLを設定できる項目があるが、PingサーバのURLを記述してもサーバに送信されるのはTrackbackPingなので、更新情報として反映されない。
→実はここで大きな勘違いをしていました。