2013-12-10 7 views
6

में पदों को सॉर्ट करने दें, मैं कई मानदंडों के आधार पर पोस्ट फ़िल्टर करने के लिए एक पृष्ठ बनाना चाहता हूं।उपयोगकर्ताओं को वर्डप्रेस

मैं wp_query के साथ काम कर सकता हूं और आसानी से पोस्ट वितरित कर सकता हूं, मेरी समस्या यह है कि मुझे पता नहीं चल सकता है (न ही मुझे इसके बारे में कोई जवाब मिल सकता है, मुझे विश्वास है कि मैंने देखा) उपयोगकर्ताओं को यह कैसे करने दें।

उदाहरण के लिए इसे लें, कीमतों (कस्टम फ़ील्ड मेटा मान) के क्रम में पदों को उच्चतम से निम्नतम 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; ?> 

अब, यहां तक ​​कि पढ़ने और googling के बाद, मैं अगर मैं पता लगा सकते हैं कि कैसे मैं सामने के छोर पर यह लागू होता है उन पदों को फिल्टर करने के लिए शापित हो जाएगा।

मेरा मतलब है, मुझे पता है कि आप पदों के क्रम को बदलने के लिए वर्डप्रेस में यूआरएल में जोड़ सकते हैं, लेकिन इस संदर्भ में मैं पूरी तरह से खो गया हूं।

मैंने कोशिश की, लेकिन यह काम नहीं करता है।

<?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 में कुछ लिखना चाहते हैं अनुमान लगा), उन परिणामों की संख्या सेट करें जिन्हें वे वापस करना चाहते हैं।

मैंने सूर्य के नीचे सब कुछ googling करने की कोशिश की है, मैं इसके लिए, कोई पासा नहीं सोच सकता।

उत्तर

0

ठीक है, मैं यह स्पष्ट कर देना कोड अद्यतन:

--- मुझे नहीं लगता कि 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 
     ) 
    ); 
... 

आपका पहले पाश 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

क्या दूसरे भाग को लूप के अंदर होना चाहिए? – andy

+0

नहीं, एक लूप में नहीं – Zac

+0

जब तक मैं पहले भाग से लूप के अंदर दूसरा भाग नहीं डालता, यह पृष्ठ पर कभी नहीं दिखाई देता है। – andy

3

Simple Custom Post Order plugin आज़माएं।

यह AJAX और जावास्क्रिप्ट का उपयोग कर रहा है, आपको कुछ और लोड करने की आवश्यकता नहीं है। आपको सिर्फ पोस्ट को खींच और छोड़ना होगा।

+0

यह बैकएंड फ़िल्टरिंग के लिए है और ओपी क्या चाहता था। – phpheini

0

$_GET पैरामीटर का उपयोग करना यहां जाने का तरीका है। सबसे पहले आप इन विज़िटर को इन चरों को जोड़ने की अनुमति देना चाहेंगे। लिंक दृष्टिकोण ठीक है, कुल मिलाकर, इसलिए हम वर्तमान यूआरएल के अतिरिक्त पैरामीटर पर काम करने के लिए add_query_arg का उपयोग करके संवर्धित लिंक उत्पन्न कर सकते हैं।

<?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'; 
?> 

अब आप डेटा तुम सिर्फ पुनः प्राप्त के साथ अपने मुख्य क्वेरी को बढ़ाने जाएगा। यदि आप किसी पृष्ठ पर पोस्टिंग क्वेरी का डिफ़ॉल्ट तरीका उपयोग कर रहे हैं तो आपको query_posts से दूर जाने में सक्षम होना चाहिए, हालांकि यह not recomended है।और, यदि आप एक कस्टम पाश उपयोग कर रहे हैं, बस नई बहस इसे में इंजेक्षन:

<?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 और बटन प्रेस करने, और अधिक मामलों बनाने का विस्तार करने के द्वारा, ऊपर मूल उदाहरण।

कोड का पहला भाग जहां भी आप अपने बटन दिखाना चाहते हैं वहां जायेंगे। कोड का दूसरा भाग तीसरे से पहले चला जाता है, जो परिणामों को आउटपुट करने से पहले चला जाता है।

संबंधित मुद्दे