2016-08-13 4 views
14

से डुप्लीकेट $ चिपचिपा पोस्ट को बहिष्कृत करता है क्योंकि वर्डप्रेस sticky posts फीचर पदों के सामने वाले पृष्ठ के शीर्ष पर पोस्ट पोस्ट पैनल में चिपचिपा के रूप में चेक की अनुमति देता है।वर्डप्रेस लूप

<?php if (have_posts()) : ?> 
    <?php $post = $posts[0]; $c=0;?> 
    <?php while (have_posts()) : the_post(); ?> 

    <?php $c++; 
     if(is_home() && !$paged && $c == 1) :?> 
     <!--First sticky post content --> 

    <?php elseif(is_home() && !$paged && $c == 2) :?> 
     <!--Second sticky post content --> 

    <?php elseif(is_home() && !$paged && $c == 3) :?> 
     <!--Third sticky post content --> 

    <?php else:?> 
     <!-- Standard post content --> 

    <?php endif;?> 
    <?php endwhile; ?> 
    <!-- End of the main loop --> 
     //pagination 

    <?php else : ?> 
     <?php _e('Sorry, no posts matched your criteria.'); ?> 

    <?php endif; ?> 

परिणाम मैं अनुकूलित शैली के साथ पहले तीन पदों (चिपचिपा के रूप में जाँच की) प्राप्त है, जबकि दोहराया: मैं भी निम्नलिखित के रूप में The Loop डिफ़ॉल्ट कोडिंग को अनुकूलित करके पाश के भीतर सामान्य लोगों की तुलना में अलग चिपचिपा पोस्ट शैली का इरादा था मानक पदों आउटपुट जिसमें मैं छुटकारा पाने में विफल रहा।

मैं <?php elseif(!is_sticky()) : ?> साथ <?php else : ?> को बदलने के लिए कोशिश की, लेकिन है कि किए गए पेज प्रदर्शित किया जा रहा "पृष्ठांकित" है या वर्तमान पृष्ठ संख्या एक से अधिक पदों के लिए प्रत्येक पृष्ठ प्रति प्रकाशन दिनांक के अनुसार चिपचिपा पदों से घटाया गिनती गया है है।

चिपचिपा पदों को डुप्लिकेट करने में कोई मदद की बहुत सराहना नहीं की जाती है।

+0

आप 2 छोरों या सिर्फ 1 है से केवल चिपचिपा पोस्ट को निकालने के लिए इस कोड को प्रयोग करते हैं? कृपया यदि संभव हो तो पूरा कोड साझा करें ... – shramee

+0

हे @Ehab, मान लीजिए कि आपके पास केवल एक लूप है, – shramee

उत्तर

4

मेरा सुझाव है कि आप WP_Query प्रलेखन पढ़ने के लिए:
https://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters

आप चिपचिपा लोगों के बिना पदों नया बना सकते हैं (या मौजूदा बदल) क्वेरी और लाने।

न दिखाएँ स्टिकी पोस्ट

क्वेरी से सभी चिपचिपा पदों को शामिल न करें:

$query = new WP_Query(array('post__not_in' => get_option('sticky_posts')));

मेरा सुझाव है कि आप लगातार 2 प्रश्नों बनाते हैं।

चिपचिपा पदों को लाने के लिए सबसे पहले और दूसरा अन्य सभी पदों को लाने के लिए (ऊपर वर्णित चिपचिपा एक) चिपकाने के लिए।

+0

से नीचे मेरा उत्तर देखें, मैं क्वेरी तर्क से परिचित हूं। यह पूरी लूप से चिपचिपा पदों को पूरी तरह से हटा देगा जबकि मुझे केवल पहले पृष्ठ पर उनकी आवश्यकता है https://codex.wordpress.org/Sticky_Posts –

+1

उस स्थिति में, मेरा सुझाव है कि आप दो लूप का उपयोग करें, चिपचिपा पोस्ट प्राप्त करने के लिए पहले एक, और दूसरी अन्य सभी पोस्ट पाने के लिए (चिपचिपा वाले लोगों को छोड़ दिया गया)। –

1

आप इस तरह घर-पेज पोस्ट और अन्य पदों को अलग कर सकते हैं:

<?php if (have_posts()) : ?> 

<!-- if home page --> 
<?php if(is_home() && !$paged) :?> 

    <!-- First page loop --> 
    <?php $post = $posts[0]; $c=0;?> 
    <?php while (have_posts()) : the_post(); ?> 

    <?php $c++; 
    if($c == 1) { ?> 
    <!--First sticky post content --> 
    <?php } ?> 

    <?php if($c == 2) { ?> 
    <!--Second sticky post content --> 
    <?php } ?> 

    <?php if($c == 3) { ?> 
    <!--Third sticky post content --> 
    <?php } ?> 

    <?php endwhile; ?> 
    <!-- End of first page loop --> 

<!-- else if not home page --> 
<?php else:?> 

    <!-- exclude stuicky posts, then run the standard loop --> 
    <?php $query = new WP_Query(array('post__not_in' => get_option('sticky_posts'))); 

    <?php while (have_posts()) : the_post(); ?> 
    <!-- Standard post content --> 

    <?php endwhile; ?> 

<?php endif;?> 
<!-- end if home page/else --> 
    //pagination 

<!-- else if have no posts --> 
<?php else : ?> 
    <?php _e('Sorry, no posts matched your criteria.'); ?> 

<?php endif; ?> 
<!-- end if have posts/else --> 
1

चिपचिपा पदों को संभालने के लिए है

<?php 
    $sticky_query = new WP_Query(array('post__in' => get_option('sticky_posts'))); 
    while ($sticky_query->have_posts()) : $sticky_query->the_post(); 
?> 

पदों जो चिपचिपा नहीं हैं

<?php 
    $non_sticky_query = new WP_Query(array('post__not_in' => get_option('sticky_posts'))); 
    while ($non_sticky_query->have_posts()) : $non_sticky_query->the_post(); 
?> 
कर को संभालने के लिए


पीएस - is_sticky() काम नहीं करेगा यहां जैसा कि मैं अनुमान लगा रहा हूं कि यह कोड आपके होम पेज पर चलता है। is_sticky() को पोस्ट पेज के अलावा अन्य पृष्ठों पर आवश्यकतानुसार काम करने के लिए post_id की आवश्यकता होगी।

आप अपने वर्तमान कोड में लूप के अंदर इस is_sticky(get_the_ID()) जैसे कुछ कर सकते हैं।

1

सीधे शब्दों में continueelse में अगर पोस्ट चिपचिपा है

रखो

<?php if (is_sticky()) continue;?> 
बाकी खंड के शीर्ष पर

...
आप कोड इस

<?php if (have_posts()) : ?> 
<?php $post = $posts[0]; $c=0;?> 
<?php while (have_posts()) : the_post(); ?> 

<?php $c++; 
    if(is_home() && !$paged && $c == 1) :?> 
    <!--First sticky post content --> 

<?php elseif(is_home() && !$paged && $c == 2) :?> 
    <!--Second sticky post content --> 

<?php elseif(is_home() && !$paged && $c == 3) :?> 
    <!--Third sticky post content --> 

<?php else:?> 
    <?php if (is_sticky()) continue;?> 
    <!-- Standard post content --> 

<?php endif;?> 
<?php endwhile; ?> 
<!-- End of the main loop --> 
    //pagination 

<?php else : ?> 
    <?php _e('Sorry, no posts matched your criteria.'); ?> 

<?php endif; ?> 
1

कुछ ऐसी दिखाई देगी आपको केवल इस चिपचिपा पदों को प्रदर्शित करने के लिए इस कोड का उपयोग कर सकते हैं

तो पाश

<?php 
$args = array(
'posts_per_page' => 4, 
'post__not_in' => get_option('sticky_posts') //that will remove only sticky posts 
); 
$my_query = new WP_Query($args); 
while($my_query->have_posts()) : $my_query->the_post(); 
?> 
    <!-- normal posts content without sticky --> 

<?php endwhile; ?> 
<?php wp_reset_postdata(); ?>