カテゴリー : WordPress

wordPress MUにて、投稿時に何かアクションをする場合

※たぶん、WordPress本家もほとんど同じと思われます。

WordPressMUを使っているときに、管理しているブログで投稿した記事の新着を表示する必要があったのですが、
複数のブログの新着をまとめて見る機能はついていないようなので、調べてみました。

方針としては、どのブログであろうと、投稿を行うときに、新着テーブルにインサートしてしまおうという方向です。

1.投稿しているプログラムを探す。

単純に、投稿している画面のHTMLを読んで、探しました。

結果、 wp-admin/includes/post.php で行っていることが判明。

この中の、function edit_post()で投稿(更新のときも)を行っています。

ためしに、関数の最後に、

foreach($_POST as $key=>$val){
$text.=$key.”:”.$val.”<br />”;
}
wp_die( $text.”<br / >id:”.$post_ID);

として確認。

投稿はしっかり反映されているものの、POSTの内容がしっかり表示されました。

2.投稿成功時のロジック追加

WPは投稿がうまくいかなかったら、上手にエラーでろじっくを止めてくれるので、関数の最後に、テーブルインサートの文を入れるだけで良さそうです。

wp_postsのような名前のテーブルから、IDをもとに検索した結果を、そのまま新規投稿保存テーブルに挿入します。

3.表示

あとは、新規投稿保存テーブルから、適宜ぬきだせばOK

意外と簡単でした。

WordPressMuインストールについての覚書

ポータルサイト構築中、ブログを自動的にインストールする必要にかられて、WordPressをシステム的にインストールする方法を調査したので、記録。

最初は、

  1. wordPress.zipをサーバ某所においておく
  2. usrMake()がよばれたら、wordPress.zipをusrディレクトリに展開
  3. wp-config.phpを自動生成
  4. パーミッション調整

ていう手順でいけるかなーと作っていたんだけども、ふとしたところで、WordPressMUの存在に気づいたので、入れてみた。

すこぶる便利。

手順は以下。


1.WordPressMuのダウンロード

http://mu.wordpress.org/download/

2.設定は、ウィザードに従っていけば簡単

特に難しいところは無し。

3.テンプレートを編集可能にする

デフォルトだと、管理画面からテンプレートの編集は不可能。

そこで、PHPファイルを書き換えて、可能にする。

/wp-admin/includesフォルダ内の、mu.phpを編集。

①現行v2.8.6なら、556行目にある、
“unset( $submenu[‘themes.php’][10] ); // always remove the themes editor”
という項目の頭に、//を付けて、
“//unset( $submenu[‘themes.php’][10] ); // always remove the themes editor”
②現行v2.8.6なら、1128行目にある、
“if ( strpos( $_SERVER[‘PHP_SELF’], $page ) ) {”
とい項目を以下の様に変更。
“if ( strpos( $_SERVER[‘PHP_SELF’], $page ) && !is_site_admin() ) {”

http://active-oita.com/subekoro/blog/archives/485 参照

4.自動ユーザ登録のための手順

ここから先は、普通は必要無し。

今回の開発では、クライアントの要望で、システム的にユーザ追加の必要があった。

まずは、単純に、下記URLのソースから、フォーム部分を持ってきてfile_get_content()でキックしようとしたけども、失敗。

http://an.koutaigu.com/blog/wp-admin/wpmu-blogs.php

管理者権限でログインした状態でないとダメらしい。

そりゃそうだ。

仕方が無いので、ソースを見てみて、直接、内部でユーザ登録をしている部分の関数を引っこ抜くことにする。

該当部分は、wpmu-edit.phpの、Addblogの部分。

ここをまるっとコピーして、少しだけ編集して、usrMake.phpを作成。

変更部分は、下記のとおり。

require_once(‘../wp-load.php’);

require_once(ABSPATH . WPINC . ‘/registration.php’);

print $current_site->domain;

//check_admin_referer(‘add-blog’);

コピペした段階だと、必要なrequire_onceが呼ばれていないので、最初にwp-loadとregistrationを呼んでおく。

そして、check_admin_refererを呼んでいる部分をコメントアウト。

あとは適当なHTMLファイルから、POSTでデータをusrMake.phpに渡してあげればOK。