2013-12-10 9 views
6

多くの基準に基づいて投稿をフィルタリングするためのページを作成したいと思います。ユーザーがWordpressで投稿を並べ替えるようにする

私はと一緒に仕事をすることができます。私の問題は私が理解できないことでもありません。

たとえば、これを取ると、価格(注文フィールドのメタ値)の順番で投稿が33個の投稿で最高から最低まで返されます。今

<?php 

$featuredPosts = new WP_Query(array(
'posts_per_page' => 33, 
    'meta_key'=>'Price', 
    'orderby' => 'meta_value_num', 
    'order' => DESC 
)); 

?> 

<?php if ($featuredPosts->have_posts()) : ?> 

<?php while ($featuredPosts->have_posts()) : $featuredPosts->the_post(); ?> 

<article <?php post_class('item-post block'); ?> id="post-<?php the_ID(); ?>"> 
<h2 class="price-title"><?php the_title(); ?> </h2> 

</article> <!-- end div post --> 

<?php endwhile; wp_reset_query(); ?> 

<?php endif; ?> 

私は、ユーザーが記事をフィルタリングするために、私は、フロントエンドでこれを実装したい方法を見つけ出すことができれば、さえ読んで、グーグルの後、私はのろわれます。

私は、WordpressのURLに追加して投稿の順序を変更できることを知っていますが、この文脈では私は完全に失われています。

私はこれを試しましたが、動作しません。私が達成しようとしている何

<?php 

$by_price = esc_url(add_query_arg(array(
    'meta_key' => 'price', 
    'orderby' => 'meta_value_num', 
    'order' => ASC 
))); 
$by_date = esc_url(add_query_arg(array(
    'orderby' => 'date', 
    'order' => DESC 
))); 

?> 

<ul> 
    <li><a href="<?php echo $by_price;?>">Order by price</a></li> 
    <li><a href="<?php echo $by_date;?>">Order by date</a></li> 
</ul> 

は、(私はフィールドに価値を提供するためのjQueryで何かを書くだろうと推測)価格帯を選択し、ユーザーはカテゴリーを選択してみましょう、だけでなく、実際には非常に簡単です返される結果の数を設定します。

私はグーグルですべてを試しました太陽の下で私はこれについて考えることができる、ダイスはありません。

答えて

0

OK、私はそれを明確にするために、コードを更新:

---私はmeta_keyが自動ピックアップだろうとは思いません---

のfunctions.php

... 

    $whitList = array(
     'price' => array(
     'posts_per_page' => 33, 
     'meta_key'=>'price', 
     'orderby'=>'meta_value_num', 
     'order' => ASC 
     ), 
     'date' => array(
     'posts_per_page' => 33, 
     'orderby'=>'date', 
     'order' => DESC 
     ) 
    ); 
... 

あなた第1のループPHP:あなたのリストのページについては

<?php 

gloabl $whitList; //to use the $whitList in your functions.php. 

$aryQuery = $whitList[$_REQUEST['orderby']] ? $whitList[$_REQUEST['orderby']] : $whitList['price']; 

$featuredPosts = new WP_Query($aryQuery); 

.... 
.... 
?> 

<ul> 
<?php 
    gloabl $whitList; //to use the $whitList in your functions.php. 
    foreach($whitList as $orderby => $aryOrderBySettings){ 
     ?> 
     <li> <a href="<?php echo esc_url(add_query_arg('orderby', $orderby));?>">Order by <?php echo $orderby;?></a></li> 
     <?php 
    } 
?> 
</ul> 
+0

2番目の部分はループ内にある必要がありますか? – andy

+0

いいえ、ループ内ではありません – Zac

+0

最初の部分から2番目の部分をループ内に置かない限り、ページに表示されません。 – andy

3

お試しSimple Custom Post Order plugin

これはAJAXとJavaScriptを使用しているため、他のものを読み込む必要はありません。投稿をドラッグアンドドロップするだけです。

+0

です。これはバックエンドのフィルタリングであり、OPが望んでいたものではありません。 – phpheini

0

$_GETパラメータを使用すると、ここに行くことができます。まず、訪問者がこれらの変数を追加できるようにする必要があります。リンクアプローチは全体的にうまくいくので、add_query_argを使用して拡張リンクを生成して、現在のURLに余分なパラメータを追加することができます。

<?php 
    $urla = add_query_arg('sort' => 'price', 'asc' => '1'); 
    $urld = add_query_arg('sort' => 'price', 'asc' => '0'); 
?> 
<a href="<?php echo esc_url($url); ?>">Sort by price (asc)</a> 
<a href="<?php echo esc_url($url); ?>">Sort by price (desc)</a> 

クリックすると、変数にタックこのようにして検出することができます。

<?php 
    // Get an allowed sort variable and the order 
    $sort = isset($_GET['sort']) && in_array($_GET['sort'], array('price'))) 
      ? $_GET['sort'] : null; 
    $order = isset($_GET['asc']) && $_GET['asc'] == '0' ? 'DESC' : 'ASC'; 
?> 

今、あなたはあなただけ取得したデータを使用してメインクエリを増補でしょう。あなたがページの投稿を照会するデフォルトの方法を使用している場合は、not recomendedですが、query_postsで逃げることができます。そして、あなたは、単にそれに新しい引数を注入し、カスタムループを使用している場合:

<?php 
    $args = array(); 
    switch ($sort): 
     case 'price': 
      $args['order'] = $order; 
      $args['orderby'] = 'meta_value_num'; 
      $args['meta_key'] = 'price'; 
      break; 
     default: 
      break; 
    endswitch; 

    $defaults = array('posts_per_page' => 33); 
    $query = new WP_Query(wp_parse_args($args, $defaults)); 
?> 

あなたは押すように複数のURLとボタンを作成することによって、より多くの変数を追加することができ、かつswitch文のより多くの例が延長します上記の基本的な例。

最初のコードは、ボタンを表示する場所になります。 2番目のコードは3番目のコードの前にあり、結果が出力されます。

関連する問題