-
I posted to blog.mkuma.oops.jp
WordPressのBlog Optionをまとめて取得する
WordPressをマルチサイトで動かしていると、wp_optionsテーブルがブログ単位で作成されるので、まとめて設定内容を確認したいときに、めっさ面倒くさい。なので、まとめて設定値を取得できるストアドプロシージャを書いてみました。 call sp_get_blog_options('dbname', 'option_name', 0); 引数は 1)データベース名 2)取得したいoption_name値 3)group byするかどうかフラグ(0=しない,1=する) の3つです。 ブログで使われているブログテンプレートを集計したい場合は call sp_get_blog_options('wordpress', 'template', 1); とすれば、各テンプレートの利用数を取得できます。最後の引数を0にするとblog_idとoptions_valueをそのままダンプします。 PHPで呼び出す場合は$wpdb->get_results()やmysql_query()ではエラーになるので注意してください。呼び出す場合はmysqli_query()で。あと、information_schemaにアクセスできるDBアカウントで実行するのもお忘れ無く。 DELIMITER $$ DROP PROCEDURE IF EXISTS sp_get_blog_options $$ CREATE PROCEDURE sp_get_blog_options( IN db_name varchar(100), IN option_value varchar(100), IN summary_flag int…
February 2 2012, 4:23am | Comments »
-
I posted to blog.mkuma.oops.jp
WordPressのdbDelta()関数で、ハマったのでメモ。 dbDelta()関数は、CREATE TABLE文などを実行する際に、既に存在するテーブルかをチェックして、存在すればALTER TABLE文に変換してくれる便利なもの。 ですが、マルチサイトを運営していて、抱えているブログ数が増えてくると、このdbDelta()関数内で"SHOW TABLES"クエリーを投げる箇所がネックになってきます。DB内の全てのテーブルを列挙するので、SHOW TABLEの結果が数千〜数万になってくるとメモリ不足となり、エラーも吐かずにプロセスがスタックします。 どのタイミングで落ちるかというとブログ作成のタイミング。wpmu_create_blog()内のdbDelta()が呼ばれたところで落ちてしまいます。アカウントの新規登録、ブログの新規作成という結構、困る場所です。 BuddyPressを利用しているので、ブログの新規作成はBuddyPressテンプレート(/wp-content/themes/theme_name/blogs/create.php)でini_set()を実行して解決。 ちょっと困ったのが、アカウントの新規登録のタイミング。どこかのフィルタかアクションをフックして @ini_set('memory_limit', '128M'); というような感じでメモリ上限を上げたいと考えたのですが、あまり良い場所が無いんですね。仕方なく、random_passwordフィルタをフックして、メモリ上限を上げる方法を取りました。 と、いっても対処療法なので、この問題で困る前にDBを分散したほうがいいんですけどね…。
December 29 2011, 2:46am | Comments »
-
I posted to blog.mkuma.oops.jp
f.easing[e.animatedProperties[this.prop]] is not a function
BuddyPress 1.5がリリースされていますが、テンプレートの下位互換が無いようなのでWordPressを3.1.2から3.2.1へ、BuddyPressを1.2.8から1.2.10へアップデートしました。その際にハマったメモ。 ブラウザのエラーコンソールなどで f.easing[e.animatedProperties[this.prop]] is not a function というエラーが出て、ダッシュボードのアコーディオンメニューが開閉できなくなったりします。これはWordPress 3.2でjQueryが1.6.1になり、easein()が利用できなくなったためのようです。 参考) jQuery Animation, Easing Woes BuddyPress 1.2.9のglobal.jsからeasein()がeaseinQuad()に書き換えられているのでBuddyPressのbp-defaultテーマから最新のglobal.jsを使用中のテーマディレクトリにコピーすれば直ります。 毎回、BuddyPressのアップデートの際に、この辺のファイルを反映しわすれがち…。
September 27 2011, 6:11pm | Comments »
-
I posted to blog.mkuma.oops.jp
以前書いたエントリー「ksoap2-android + .NET Web Service」の続きです。 Android端末からSOAPを使ってASP.NETなサイトのログイン処理を利用するお話があり、認証クッキーを使わないと行けないケースが出てきたので、いろいろ調べていたのですが、HeaderPropertyを使えばいいよ的な情報は入手したものの、そんなクラスは無い…。 そこで、ksoap-androidのバージョンを2.5.7に上げたら、HeaderPropertyが追加されていました。どの時点で追加されたのかは確認していませんが、2.5.2の時には無かったもの。 import org.ksoap2.HeaderProperty; (中略) private String mCookie = ""; (中略) /* Cookieを取得 */ List<HeaderProperty> headers = new ArrayList<HeaderProperty>(); HttpTransportSE transport = new HttpTransportSE(url); transport.debug = true; List<HeaderProperty> responseHeaders = new ArrayList<HeaderProperty>(); responseHeaders…
August 13 2011, 4:51am | Comments »
-
I posted to blog.mkuma.oops.jp
ksoap2-android + .NET Web Service
ASP.NET上のWebサービスをAndroidから使ってみるテスト。 いろいろハマったので、メモ。 で、Android側はksoap2-android 2.5.2を使用します。 ■ksoap2-androidの準備 こちらからjarをダウンロードして、Javaのビルドパスに追加 http://code.google.com/p/ksoap2-android/ ■インターネット接続を許可 AndroidManifest.xmlに以下の行を追加。 <uses-permission android:name="android.permission.INTERNET"></uses-permission> ■Webサービス側の実装(C#) [WebMethod] public SearchResult SearchProduct(SearchCondition searchCondition); こんなメソッドをAndroidから呼び出してみる。 ■AndroidからSOAPでWebサービスを実行するサンプル(Java) private static final String SOAP_ACTION = "http://tempuri.org/SearchProduct"; private static final String METHOD_NAME = "SearchProduct"; private static final String NAMESPACE…
February 10 2011, 9:41pm | Comments »
-
I posted to b.hatena.ne.jp
大文字の使用規則名前付け規則の多くが識別子の大文字と小文字の区別に関係します。共通言語ランタイム (CLR) は、大文字と小文字を区別する言語も区別しない言語もサポートすることに注意してください。ここに記載されている大文字の使用規則に従うと、開発者はライブラリを容易に理解して使用できるようになります。 mkuma443 .net, programming
September 30 2010, 1:36pm | Comments »
-
I posted to blog.mkuma.oops.jp
Can't connect to local MySQL server on 192.168.xxx.xxx (13)
新しく立てたサーバー(CentOS 5.3)でエラーが出て、ハマったのでメモ。 ローカルのMySQLには問題無く接続できて、外部のMySQLサーバーにも mysql -h 192.168.xxx.xxx -u root -p と、コマンドでは繋がるけど、Apache + PHPを経由すると、 Can't connect to local MySQL server on 192.168.xxx.xxx (13) というエラーが出る。 この時点でSELinuxの設定を疑うべきでした。意味もなくphp.iniのmysql.default_socketを設定したりmy.cnfを弄ったり、半日ほど迷走しておりました。 で、一応、ポリシーをアップデートしたりしつつ yum -y update selinux-policy-targeted 最終的にhttpdで外部ネットワークへの接続を許可していないだけでした。 setsebool -P httpd_can_network_connect 1 このへんのSELinuxの設定って、最初に1回設定したら、弄らないことが多いのですぐ忘れます。
September 3 2010, 10:00am | Comments »
-
I posted to blog.mkuma.oops.jp
WordPress + BuddyPressで局所的にSSLをかけたい場合、WordPress本体のほうは割と問題無いのですが、BuddyPressプラグインがあまりSSLを考慮していないので(考慮しているのはGravatarアイコンの表示くらい)、フィルタを追加したり、アクションそのものを入れ替えないと実現できません。 今回、 ・プロフィールページ(/members)のナビゲーションリンクの一部 ・adminbarのLoginメニュー ・adminbarのMy Accountメニュー をSSL化するために、いろいろ調べたのでメモ。 [フィルタの追加で済むもの] ・bp_get_displayed_user_nav_settingsフィルタ ・bp_core_admin_bar_cssフィルタ ・bp_core_fetch_avatar_urlフィルタ ・bp_core_fetch_avatarフィルタ フィルタなので、http:をhttps:に書き換える処理を書けばOK。 プロフィールページのナビゲーション部分のリンクと、HTMLのヘッダに挿入されるadminbar.cssのURLがhttp固定です。あとはアバター画像のURL関連。なぜかGravatarから取得するアバター画像はSSLを考慮しているのに、WordPressのアバター画像はhttp固定。 [アクションを入れ替えないといけないもの] ・bp_adminbar_menuアクションのbp_adminbar_account_menu ・bp_adminbar_menuアクションbp_adminbar_login_menu adminbarに表示されるMy AccountメニューとLoginメニューのリンクがhttp固定なので、それを書き換えたいわけですが、これらはアクションなので、オリジナルremove_action()して、新しいアクションをadd_action()しないといけません。オリジナルのアクションをコピペしてURLを出力している部分を書き換えればなんとかなります。 adminbarを弄っているので、このフィルタとアクションはfunctions.phpではなく、ネットワークで有効化するプラグインの中に書く必要があります。
August 15 2010, 4:10pm | Comments »
-
I posted to blog.mkuma.oops.jp
BuddyPress 1.1から1.2にアップデートしたときに、自作プラグインで拡張したプロフィールページなどが表示されなくなった。 結局、plugin-templateというのは無くなったようで、テンプレートパスを書かないといけないらしい。 [bp 1.1] bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'plugin-template' ) ); [bp 1.2] bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'members/single/plugins' ) ); 上記の記述だと/wp-content/themes/bp-default/members/single/plugins.phpが使用される。 というメモ。
May 4 2010, 6:18pm | Comments »
Page: 1

