web-dev-qa-db-ja.com

ドロップダウンメニューを使用してカスタムフィールドの値で投稿を並べ替える

価格と呼ばれるカスタムフィールド値で投稿を並べ替えようとしています。カスタムフィールド値に数字のみを使用します。私はウェブサイトの訪問者がドロップダウンを使って価格で投稿をソートできることを望みます。プラグインを探しましたが見つかりませんでした。今、あなたは以下のコードを見つけました:

<?php
  $order = "&order=DESC";
  if ($_POST['select'] == 'tag') { $order = "&tag=mytag";  }
  if ($_POST['select'] == 'title') { $order = "&order=ASC&orderby=title";  }
  if ($_POST['select'] == 'newest') { $order = "&order=DESC"; }
  if ($_POST['select'] == 'oldest') { $order = "&order=ASC";  }
  if ($_POST['select'] == 'mcommented') { $order = "&order=DESC&orderby=comment_count";  }
  if ($_POST['select'] == 'lcommented') { $order = "&order=ASC&orderby=comment_count";  }
  if ($_POST['select'] == 'prijs') { $order = "&order=ASC&orderby=meta_value_num";  }
?>
<form method="post" id="order">
  Sort reviews by:
  <select name="select" onchange='this.form.submit()'>
    <option value="tag"<?php selected( $_POST['select'],'tag', 1 ); ?>>Tag</option>
    <option value="title"<?php selected( $_POST['select'],'title', 1 ); ?>>Title</option>
    <option value="newest"<?php selected( $_POST['select'],'newest', 1 ); ?>>Newest</option>
    <option value="oldest"<?php selected( $_POST['select'], 'oldest', 1 ); ?>>Oldest</option>
    <option value="mcommented"<?php selected( $_POST['select'],'mcommented', 1 ); ?>>Most commented</option>
    <option value="lcommented"<?php selected( $_POST['select'],'lcommented' , 1 ); ?>>least commented</option>
    <option value="prijs"<?php selected( $_POST['select'],'prijs' , 1 ); ?>>prijs</option>
  </select>
</form>
<?php query_posts($query_string . $order); ?>

しかし、最後の選択オプション 'prijs'は機能しません。

誰かが私を手伝ってくれる?それとももっと情報が必要ですか?

それが全く正しくないならば、私の英語ですみません。

1
Doen Webontwerp

query_postsの代わりにWP_Queryクラスを使ってみてください。 http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters

これはcodexからの例です。

$args = array(
'post_type'  => 'my_custom_post_type',
'meta_key'   => 'age',
'orderby'    => 'meta_value_num',
'order'      => 'ASC',
'meta_query' => array(
    array(
        'key'     => 'age',
        'value'   => array( 3, 4 ),
        'compare' => 'IN',
    ),
),
);
$query = new WP_Query( $args );
1

meta_keyを追加する必要があります。そうすることで、どのメタ値を比較するのかがわかります。

https://codex.wordpress.org/Class_Reference/WP_Meta_Query

$order = "&order=ASC&meta_key=prijs&orderby=meta_value_num";

詳細情報: カスタムフィールドのorderby meta_valueを使用したカスタムクエリ

0
admcfajn