いつまで経ってもわからない、WEBってやつは・・・(´・ω・`)

【WordPress】検索結果から更にカスタムフィールド値を取得してその値で並び替える(´・ω・`)

こんばんわ、Facebookのいいねボタンのjsが「all.js#xfbml=1sdk.js#xfbml=1&version=v2.0」となると聞いて、いいね!ボタンは新しいコードに書き換えないと2015年5月以降動かなくなります(公式情報)「新旧いいね」チェックをいろんなサイトでしてみてはニヤニヤしているゆでです(*´ω`*)<ウワーサイテーw

さてさて、ほとんど…いや全くないと思いますが、カスタムの検索などをしていて、検索結果をカスタムフィールドの値で並び替えたい時、そのカスタム検索にどうしても並び替えたいカスタムフィールドの値が受け取ってこれず、検索結果を並び替えられない…!という場合の対処法です(ΦωΦ)<ねぇよ!w

検索結果をカスタムフィールドの値でソート

特定の値で投稿の並び替えやソート表示をする時のメモでも記載しましたが、通常ならば下記でできます。

<?php $my_query = new WP_Query('orderby=meta_value&meta_key=★ソートしたいカスタムフィールド名★&order=asc'); ?>
<ul class="news">
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
<li>ホニャホニャ。</li>
<?php endwhile;wp_reset_query(); ?>
</ul>

しかし、今回ゆでがぶち当たった壁、カスタム検索結果の場合、上記が全く反映されなかった…ヽ(=´▽`=)ノヒェー!

カスタム検索結果の場合などで上記が全く反映されなかった場合の対処

queryの中身を見てみると、まぁ…値を取得するSELECTに指定したmeta_keyが入ってなかったんだ(´Д`)NAZE★

そんな時の一時的な(だって無駄にくるくる回しちゃうから(´;ω;`))対処です。

function.phpに下記関数を記載

function order_search_sort($array,$order) {
 $arr = array();$foo = array();$foo2 = array();$add = "";
 $arr[] = $array->posts;
 foreach($arr[0] as $key => $value){
  $add = get_post_meta($value->ID,$order,true);
  $value->$order = $add;
  $foo[$key] = $value;
 }
 foreach ($foo as $key => $value){ $key_id[$key] = $value->$order; }
 array_multisort ( $key_id , SORT_ASC , $foo);
 return $foo;
}

※$arrayには指定したい配列 $orderは並び替え順のキーを入力(ΦωΦ)

表示側は下記で出力

<?php $my_query = new WP_Query(array('orderby'=>'meta_value','meta_key'=>'★ソートしたいカスタムフィールドのキー★','order'=>'asc')); ?>
<?php
$foo = order_search_sort($my_query,'★ソートしたいカスタムフィールドのキー★');
foreach ( $foo as $post ): ?>
 出力(*´∀`*)させたい内容
<?php endforeach;wp_reset_postdata(); ?>

ムダにくるくるさせて申し訳ないけど、この力技でいけます(*´∀`*)

※出力させたい内容は通常通りの「$post」使用でいけます。例えば「$post->ID」だとか、下記とか

<li><a href="<?php the_permalink(); ?>"><span><?php the_time('Y/m/d') ?></span><?php the_title(); ?></a></li>

同じような方、いないと思いますが(カスタム検索部分に改修お願いすればいいんだもんねw)それができない(有料プラグインでいじれない方とか)は上記力技を試してみてください(*´ω`*)w