サポート » 使い方全般 » カスタムフィールドの値で数値比較

  • カスタムフィールドの値で数値比較を行いたいので下記のようにしたのですが上手く動作
    しないので困っています。
    カスタムフィールド:key=time_date value=20140921

    <tr>
        <th>発売年別</th>
        <td>
        <select name="low">
        <option value="">▽</option>
        <?php optionLoop('1950', date('Y'), '2000');?>
        </select> 年から
        <select name="high">
        <option value="">▽</option>
        <?php optionLoop('1950', date('Y'), '2000');?>
        </select> 年まで
        </td>
    </tr>

    search.php

    <?php
    $s = $_GET['s'];
    $low = $_GET['low'];
    $high = $_GET['high'];
    
    //meta_query用
    $metaquerysp[] = array(
                'key'=>'time_date',
                'value'=>array( $low, $high ),
                'compare'=>'BETWEEN',
                'type'=>'NUMERIC',
                );
    ?>
    
    <div>検索条件</div>
    <?php if($s){ ?>検索キーワード:<?php echo $s; ?><br><?php } ?>
    <?php if($low == 1950 && $high == 2050){}else{ ?>年:<?php if($low == 1950){ ?><?php }else{ echo number_format($low).'年'; } ?> ~ <?php if($high == 9999999){ ?><?php }else{ echo number_format($high).'年';} ?><?php } ?>
    
    <div>検索結果</div>
    
    <?php
    query_posts( array(
        'meta_query' => $metaquerysp,
        's' => $s,
        )
    );
    ?>
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    
    <div><?php the_title(); ?></div>
    <div><?php the_content(); ?></div>
    
    <?php endwhile; else : ?>
    
    <div>該当なし</div>
    
    <?php endif; wp_reset_query(); ?>

    何がいけないのでしょうか?アドバイスをお願い致します。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • optionLoop() 関数が何をやっているかわかりませんが、4 桁の年号を出力しているとすると、BETWEEN 1950 AND 2000 では、20140921 にヒットしません。ついでに、query_posts() 関数を使うのはお勧めしません。

    トピック投稿者 NANOPASS

    (@nanopass)

    optionLoop() 関数は年表表示です。

    function optionLoop($start, $end, $value = null){
    	for($i = $start; $i <= $end; $i++){
    		if(isset($value) &&  $value == $i){
    			echo "<option value=\"{$i}\" selected=\"selected\">{$i}</option>";
    		}else{
    			echo "<option value=\"{$i}\">{$i}</option>";
    		}
    	}
    }

    ACFプラグインでカスタムフィールドを作っているので値が8桁だったのを下記で4桁にして

    $s = $_GET['s'];
    $low = $_GET['low'];
    $high = $_GET['high'];
    $Y = substr($time_date,0,4); //カスタムフィールドの先頭4桁を取得
    //meta_query用
    $metaquerysp[] = array(
                'key'=>'$Y',
                'value'=>array( $low, $high ),
                'compare'=>'BETWEEN',
                'type'=>'NUMERIC',
                );

    これで上手くと思ったんですが駄目でした。
    どうすれば良いのか分かりません、アドバイスをお願い致します。

    メタクエリだけでは、データベース・フィールドの値を制御できません。というか、key は、「値」じゃありません。

    optionLoop() で、$start の value に "0101" を、$end の value に "1231" を付け加えてやると、19500101 や 20001231 を飛ばせます。

    入力が 4 つの数字でできた文字列として飛んでくるので、こちらを変換する手もあります。オプションでデフォルト値が設定されているので、入力チェックもキャストもなしで。

    $low  = $_GET['low'];
    $high = $_GET['high'];
    $low  = $low * 10000 + 101;
    $high = $high * 10000 + 1231;
3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「カスタムフィールドの値で数値比較」には新たに返信することはできません。