WP Custom Fields Search
WordPressの絞り込み検索プラグイン。
有料のもの(10万円弱)はあるが、無料で使わせていただけるものは探してみたけどこれくらいしかなかった。
こちら(WP Custom Fields Searchの日本語版配布)に日本語翻訳ファイルがある。
一応、入れてみましたが、なかなか大変です。
大変さの大半は、pg4wpというプラグインを入れて、WordPressを PostgreSQLで使っているからで、なんでこんな変態的なことをしているかというと、WPと EC-CUBEの相互乗り入れサイトを制作しているため、EC-CUBE側の性能を出そうとしたら、PostgreSQLしか選択肢がないという、これって罠なんでしょうか。
手順としては、wp-custom-fields-searchの extra_search_fields.phpを pgsql用にカスタマイズします。といっても、変えるところは直接 MySQLを呼んでいる mysql_を wpsql_に変えるくらい。
あとは地道にエラーになるケースを pg4wp側の driver_pgsql.phpで潰していきます。
/* wp-custom-fields-search.php
bridges/greatrealestate.php
*/
require_once(dirname(__FILE__).'/extra_search_fields_'.DB_DRIVER.'.php');
もしこういう風に pg4wpの defineを使って MySQLと PostgreSQLで読み込むファイル名を切り替えるつもりだったら、bridges/greatrealestate.phpも忘れずやっておかないとプラグインの読み込みエラーになって、画面が真っ白になるので焦ります。
/* pg4wp/driver_pgsql.php */
// ---- MySQLからPostgresqlでエラーになるケースの修正 ----
$sql = str_replace('.id', '."ID"', $sql);
$sql = str_replace('(1 AND ', '(true AND ', $sql);
if( 0 === strpos($sql, 'SELECT') && false !== strpos($sql, '.* FROM') ) {
$gby = strpos($sql, 'GROUP BY');
$oby = strpos($sql, 'ORDER BY');
if ( false !== $gby && false !== $oby ) {
$sql = substr($sql, 0, $gby).substr($sql, $oby);
}
}
$sql = str_replace("!= ''", " ''", $sql);
PostgreSQLはフィールド名の扱いが大文字と小文字で違うので、wp_posts.IDは wp_post.id では通らず、wp_post.”ID” にしてやらないといけない。(この種のパッチは元から入っているんだけど、なぜかエラーになるので追加)
あと、(1 AND (条件)) が『integerじゃなくて booleanにしろや、ぼけぇ!』ということで通らないので、(true AND (条件))に。
GROUP BYでは項目を指定しないといけないんだけど、SELECT * になっててエラーになるパターンがあるので、これはたぶんマズイだろうと思いつつ、GROUP BYを取るとか。
あと、Search Resultに検索キーワードが出なかったので、これを入れたりとか。
管理画面でプリセットを定義するときの挙動も少し怪しげ(データフィールドが最初は選択できないなど)なんだけど、この辺りはオイオイ。
/* wp-content/db.php */
define( 'PG4WP_DEBUG', true);
define( 'PG4WP_LOG_ERRORS', true);
define( 'PG4WP_LOG', PG4WP_ROOT.'/logs/');
デバッグ中はこのあたりを trueにしておくと wp-content/plugins/pg4wp/logsにいろいろとログを書いてくれるので便利。このディレクトリには、www-dataユーザでパーミッションを出しておくこと。(デバッグ中だけだから、chmod 777でいいかも)
特定の親を持つカテゴリの抽出
WP Tipsカテゴリを全部とってきて、特定の親(ここでは11)のものだけ、カテゴリ・リストに追加して、ついでにパーマネントリンク付き<li>を作る例。
使い方は、次の通り。
kwebble_archives_by_catというカテゴリを引数に入れられる wp_get_archives()プラグインを入れておく必要があります。
特定カテゴリの最新投稿と特定カテゴリのみの一覧、特定カテゴリだけのアーカイブになります。
※ ここ(WordPressで全てのカテゴリー構造を取得する方法)とここ(カテゴリ名、投稿リスト、とか)がすごく参考になりました。
Disable wpautop と brBrbr
WP TipsWordPressが勝手に<p>タグでコンテンツをくくってしまうのが嫌なことがよくあります。(例えば、<div>でくくってる外側に<p>を付けるなど)
こういう、嫌になることが多いときは、Disable wpautopというプラグインを入れていたわけですが、これを入れると確かに<p>タグは付かないのですが、改行も全然入らなくなります。(プラグイン自体はたったこれだけ)
自分でやるときは、<br>を付ければいいだけなので別にどうってことはないのですが、他人に使ってもらう環境だとそういうわけにはいかず、どうすべぇかなぁと思っていたところ、ちょうどいいプラグインがありました。
WordPress 改行プラグインがそれです。
これを入れて、brBrbr.phpの<p>を含んでいる 22,23,27行目をコメントアウトすれば、改行が入る上、<p>タグが付かなくなります。
ビジュアルリッチエディタを使う場合は、これに加えて、wp-admin/js/editor.js、wp-includes/formatting.php を入れ替えればいいということなんですが、MUの環境だと他のサイトに影響がでてしまうので、これはやめておきました。
空行が欲しければ、全角スペースを行頭に入れてもらえばいいしね。
ありがとうございました。
スラッグの取得
WP Tipsこういう風にして、ページごとにフッターの文字色や背景を CSSで変えるという Tipsがあるんだけど、ページ・タイトルが空白を含んでいたり、日本語だったりするとちょっと嫌。ま、自分で作るんだから気をつければいいと言っちゃそれまでなんだけど。
こんな風にすると、スラッグが使えてハッピーです。”how to order”は”how-to-order”にしてくれまっせ。
あと、スラッグとはまったく関係ありませんが、TABLEの枠線の間隔をゼロにする CSSをすぐ忘れてしまうのでメモ。(もちろん、cellpadding=”0″ cellspacing=”0″ でやってOKですが)
pg4wpの続き
WP Tips一部地域(横須賀西地区)で絶賛使用中の PostgreSQL for WordPress (PG4WP) ですが、まだいろいろと調整中です。
今回ぶち当たったのは、user-role-editorというプラグイン。
こいつが、こういうSQLを投げてくるわけで、別にどうってことないと思うんだけど、selectとか fromが小文字なのが PG4WP的にはNGらしい。
確かに WordPressのコアが吐き出す SQLはキーワードがすべて大文字になってるけど、これってたまたま? それともコーディング規約かなんかあるのかな?
解決方法は2種類あって、こんな風に大文字前提でハードコートしてあるところを striposに変えるなどして、ちまちま修正していく方法が1つ。
あと1つはそもそも SQLキーワードを小文字にしてくるからいけないじゃんということで、入力時点で SQLキーワードだけ大文字にしちゃう方法。
今回は直し漏れがあると嫌なので、速度優先じゃない方法、つまり入口で修正にしました。(スピードのかかり具合によっては変えるかも)追記:早速問題があったので、stripos()、str_ireplace()を使う方法に変更。このタイミングで大文字変換しちゃうと、INSERTやUPDATE文の中身にも適応してしまうので、<script>の中の変数名が変わったりしてひどい目にあった。
無名関数でやるつもりだったんだけど、エラーが出たので深追いはせず、普通の関数で。
ただの単語単位(\b)を対象にすると $wdb->abort とかが置換されちゃうので、こういう面倒臭いことをやってます。
WP Custom Fields Search
WP TipsWP Custom Fields Search
WordPressの絞り込み検索プラグイン。
有料のもの(10万円弱)はあるが、無料で使わせていただけるものは探してみたけどこれくらいしかなかった。
こちら(WP Custom Fields Searchの日本語版配布)に日本語翻訳ファイルがある。
一応、入れてみましたが、なかなか大変です。
大変さの大半は、pg4wpというプラグインを入れて、WordPressを PostgreSQLで使っているからで、なんでこんな変態的なことをしているかというと、WPと EC-CUBEの相互乗り入れサイトを制作しているため、EC-CUBE側の性能を出そうとしたら、PostgreSQLしか選択肢がないという、これって罠なんでしょうか。
手順としては、wp-custom-fields-searchの extra_search_fields.phpを pgsql用にカスタマイズします。といっても、変えるところは直接 MySQLを呼んでいる mysql_を wpsql_に変えるくらい。
あとは地道にエラーになるケースを pg4wp側の driver_pgsql.phpで潰していきます。
もしこういう風に pg4wpの defineを使って MySQLと PostgreSQLで読み込むファイル名を切り替えるつもりだったら、bridges/greatrealestate.phpも忘れずやっておかないとプラグインの読み込みエラーになって、画面が真っ白になるので焦ります。
PostgreSQLはフィールド名の扱いが大文字と小文字で違うので、wp_posts.IDは wp_post.id では通らず、wp_post.”ID” にしてやらないといけない。(この種のパッチは元から入っているんだけど、なぜかエラーになるので追加)
あと、(1 AND (条件)) が『integerじゃなくて booleanにしろや、ぼけぇ!』ということで通らないので、(true AND (条件))に。
GROUP BYでは項目を指定しないといけないんだけど、SELECT * になっててエラーになるパターンがあるので、これはたぶんマズイだろうと思いつつ、GROUP BYを取るとか。
あと、Search Resultに検索キーワードが出なかったので、これを入れたりとか。
管理画面でプリセットを定義するときの挙動も少し怪しげ(データフィールドが最初は選択できないなど)なんだけど、この辺りはオイオイ。
デバッグ中はこのあたりを trueにしておくと wp-content/plugins/pg4wp/logsにいろいろとログを書いてくれるので便利。このディレクトリには、www-dataユーザでパーミッションを出しておくこと。(デバッグ中だけだから、chmod 777でいいかも)
Twitterの自分のツィートを表示
Tips←こういうのって、よく見かけますよね。
あれって面倒臭いんじゃないかなと思っていたら、思いのほか簡単だったので、やり方を簡単に。
ちなみに、これって自分のツィートだけじゃなくて他人のIDでも作れちゃいます。意味があるかどうかわかりませんけど。
ここ(Twitter活用術 › ウィジェット › ウェブサイトのプロフィールウィジェット)にID入れるだけ。
ここで出てくる javascriptのコードを表示したい場所に<div>かなにかに入れて貼りつけるだけでOKです。簡単ですね。