WordPress

WordPress ACF PROのチェックボックスの検索

またWordPressネタ。

ACF PROを購入した。

理由は繰り返しフィールドを使いたかったからだ。

買わないと普通のACFでは繰り返しフィールドは使えない。
でも仕事で使うのに、10000円ぐらい?でこの機能と入力のインターフェイスで用意してくれてるなら安いもんだ。

使い方は色んなサイトで解説されてるから、すぐにわかる。

先日、早速仕事で使用してみた。

何の問題もなく仕様どおりにたくさんのカスタムフィールドを登録し設定をしていく。
絞り込み検索もカスタムフィールドにあわせて作っていく。
楽過ぎる。

動作チェック

問題はそこで起こった。
絞り込み検索ですべてのカスタムフィールドの値で絞り込み検索をかけたとき、サイトが止まった。

SQLのANDの数は感覚だが20くらいだろうか?まったく動かなくなった。

WordPressでカスタム投稿の数を取得して表示する

WordPressを利用することは多く、今回はmeta_queryを利用して、カスタムフィールドに指定の値を持つ記事数を表示するという処理が必要になったので調査した。

ネットでよく見る実装方法

例によって検索をすると、以下の実装がよくひっかかる。

$args = array(
    'post_type' => 'post',
    'meta_key' => $post_meta_key,
    'meta_value' => $post_meta_value,
    'posts_per_page' => -1
);
$meta_posts = get_posts($args);
$count_post = 0;
foreach ($meta_posts as $post) {
    $count_post++;
}
return $count_post;

こっちの方がよくないですか?

なぜみんなこの記述を採用しているのかわからないが、同じ記述がよく出てくる。
が、気になるのは以下の部分

$count_post = 0;
foreach ($meta_posts as $post) {
    $count_post++;
}

カウンター変数に記事の数だけループさせて、カウントアップしているけど、なぜcount()じゃあダメなんだろう?
以下の処理ではダメなんだろうという疑問。

$args = [
    'post_type' => 'post',
    'meta_key' => $post_meta_key,
    'meta_value' => $post_meta_value,
    'posts_per_page' => -1
];
$meta_posts = get_posts($args);
return count($meta_posts);

処理時間を調べたわけではないけど、こちらの方が標準関数だからループ回すより断然速い気がするのだけれど、、、

もう1つ突っ込むとこの$meta_postsの中身は記事の配列が入っているので、重そう。。
WordPressにクエリ結果の記事数を返す関数がないか?と思ってるんだけど、調べるのがめんどくさくて調べてない。

動けばどうでもいいか(笑

WordPress 投稿記事内にPHPを記述

もうさんざん取り上げられてる内容だと思いますが、僕、知らなかったのでエントリー。

よく技術系のブログでソースを書いてあったり、FLASHを掲載してあったり、JavaScriptを動かしているのを見かけます。
自分でもやってみようと、記事を投稿すると、WordPressが勝手に<p>などを差し込んでくれます。
便利な機能ですけど、スクリプトに差し込んでいただくとこれがやっかいなことになります。