यदि कोई अन्य पोस्ट उसी दिनांक के साथ है, तो पोस्ट दिनांक नहीं दिखाती है


19

मेरे पास कस्टम पोस्ट प्रकार है "प्रेस।" और उस प्रकार के प्रश्नों के पोस्ट को एक पेज टेम्पलेट बनाया। पदों को उनकी प्रकाशित तिथि दिखाने के लिए माना जाता है, लेकिन अगर एक ही तिथि के साथ एक से अधिक पद हैं, तो केवल पहली पोस्ट दिनांक दिखाती है और अन्य नहीं। क्या हर पोस्ट की तारीख दिखाने का कोई तरीका है?

यहाँ छवि विवरण दर्ज करें

<?php get_header(); ?>
<?php
$wp_query = new WP_Query();
$wp_query -> query('post_type=press&showposts=100');
while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
<div id="press">
<div class="press-item cf">
<div class="press-img"><a href="<?php the_field('link'); ?>"><?php the_post_thumbnail('medium');?></a> </div>
<div class="press-content">
<div class="press-title"><a href="<?php the_field('link'); ?>"><?php echo get_the_title(); ?></a> </div>
<div class="press-excerpt"><?php the_excerpt(); ?> </div>
<div class="press-date"><?php the_date(); ?></div>
</div>
</div>
</div>
<?php endwhile;  ?>
<?php get_footer(); ?>

जवाबों:


40

मुझे अतीत में इसी तरह के मुद्दे का सामना करना पड़ा क्योंकि मैंने अपनी तिथि समारोह को संशोधित किया। और तब पोस्ट तारीख को प्रदर्शित कर रहे थे यदि केवल प्रत्येक पोस्ट में अलग-अलग तारीख है अन्यथा यह खाली लौट आया।

<?php echo get_the_date(); ?>इसके बजाय जोड़ने का प्रयास करें ।


26

यह क्यों नहीं दिखाता है?

जब आप the_date()फ़ंक्शन के स्रोत को देखते हैं, तो आपको दो ग्लोबल्स दिखाई देंगे:

global $currentday, $previousday;

और फिर वहाँ एक नियम है अगर प्रदर्शन करने की कोई तारीख है ... या नहीं। चेक के साथ किए गए के समान है is_new_day():

if ( $currentday != $previousday ) {

    // show date

    // Set global
    $previousday = $currentday;
}
// else
return null;

जैसा कि आप देख सकते हैं, $previousdayतुरन्त सेट हो जाता है $currentday;। तो यह एक बार इको-एड हो जाता है। ठीक उसके बाद, दोनों दिन समान हैं और चेक विफल हो जाएगा। यही कारण है कि आपकी पहली पोस्ट इसे प्रदर्शित करती है, लेकिन अन्य इसे नहीं दिखाते हैं।

क्यों दिखाता है?

यदि आप खुद से पूछते हैं कि यह एक से अधिक तारीखों को क्यों दिखाता है, तो वैश्विक रूप से यूरोपीय हो जाने के बाद, आपको एक नज़रsetup_postdata() डालनी होगी । यह फ़ंक्शन द्वारा बुलाया जाता है the_post();और लूप में एक पोस्ट के लिए सब कुछ स्थापित करने के लिए जिम्मेदार है।

if ( have_posts() )
{
    while ( have_posts() )
    {
        the_post(); # <-- Calls setup_postdata( $post );

        // your loop stuff here
    }
}

के आंतरिक setup_postdata()काफी (कम से कम क्या वैश्विक सेट प्राप्त करने के लिए) को समझने के लिए आसान कर रहे हैं:

$currentday = mysql2date('d.m.y', $post->post_date, false);
$currentmonth = mysql2date('m', $post->post_date, false);

तो चल हिस्सा वह है $previousdayजिसके खिलाफ $currentdayवैश्विक सेट और जाँच की जाती है। और जब तक नया दिनthe_date() न हो , कुछ भी प्रदर्शित नहीं करेगा।

बस अपनी पोस्ट्स को पूरी तरह से अलग दिनों में सेट करें और अचानक आपको प्रत्येक पोस्ट पर तारीख दिखाई देगी।

उसके पीछे क्या विचार है?

वास्तव में विचार बहुत सरल है और v0.7.1 के बाद से मौजूद है - कम से कम यह वही है जो phpDocBlock बताता है: आप एक संग्रह में प्रत्येक पोस्ट के लिए तारीख क्यों प्रदर्शित करना चाहेंगे? एक संग्रह इस तरह दिखता है:

+--------------+
| 28.10.2014   |
+--------------+
| Post Title A |
| Post Title B |
+--------------+
| 29.10.2014   |
+--------------+
| Post Title C |
| Post Title D |
+--------------+

आप इससे सहमत नहीं हैं? ठीक है, तो आप बस एक फ़ंक्शन का उपयोग कर रहे हैं जिसका उद्देश्य कुछ पूरी तरह से अलग होना था।

क्यों get_the_date()काम करता है और इसका सही तरीके से उपयोग कैसे करें

यह the_date()फ़ंक्शन (ग्लोबल्स चेक) में / अन्य द्वारा प्रभावित नहीं होता है । इसमें फिल्टर भी नहीं है। उसे कैसे ठीक करें? सरल:

echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );

यह the_dateफ़िल्टर से जुड़ी किसी भी कॉलबैक को आपके कस्टम आउटपुट में जोड़ता है । यह डिफ़ॉल्ट date_formatविकल्प सेटिंग को भी डिफ़ॉल्ट के रूप में उपयोग करता है - जिसका उपयोग भी किया जाता है the_date()। और यह किसी भी beforeऔर afterमूल्यों से बचा जाता है - फिर से, बिल्कुल the_date()फ़ंक्शन के रूप में ।


1
धन्यवाद केसर। यह बताता है कि क्यों कभी-कभी यह प्रिंट करने में विफल रहता है। बहुत बहुत धन्यवाद।
रॉबर्ट ह्यू

1
बहुत व्यापक व्याख्या। स्वीकृत उत्तर से बेहतर है।
नीलाम्बर शर्मा

1
@ नीलाम्बर स्वीकृत उत्तर tl; डॉ संस्करण है और पूरी तरह से ठीक है :)
kaiser

इस @kaiser में खुदाई करने के लिए सहारा - मैं इस तरह के सांसारिक मुद्दे पर उम्मीद से ज्यादा अंतर्दृष्टि
Serraosays

1
यह उत्तर WP डॉक्स स्पष्टीकरण से बेहतर है।
इयान

10

the_date()इसके बजाय, उपयोग न करें the_time()

the_date केवल दिनांक लौटाता है, the_time दिनांक + समय लौटाता है। मुझे इस बात का पता नहीं है कि the_dateलूप में इस्तेमाल होने पर वर्डप्रेस एक से अधिक तारीखों में वापस क्यों नहीं आएगा । लेकिन यह इस तथ्य के साथ करना है कि मूल्य समान है। यदि आप the_timeमूल्य का उपयोग कभी नहीं करते हैं, इसलिए यह हमेशा मूल्य लौटाता है। तो आप कुछ ऐसा प्रिंट कर सकते हैं<?php the_time('F j, Y'); ?>

कोडेक्स का यह लिंक बताता है कि कैसे_डेट मैं की तुलना में बहुत बेहतर काम करता है।


1

जानवर बलपूर्वक।

<?php the_time('F j, Y'); ?> - <?php the_time(); ?>

मेरे लिए काम किया गया है, भले ही यह एक ही तारीख हो या न हो, प्रत्येक पद के लिए पूर्ण तिथि, समय प्रदर्शित करता है।


0

यह केवल एक बार दिखाता है कि एक डायरी कैसे काम करेगी। यह शीर्ष पर तारीख दिखाएगा और आप इसके नीचे अपनी प्रविष्टियां लिखेंगे। मैं इस कोड का उपयोग यह प्रदर्शन करता है, जो प्रत्येक पोस्ट के लिए the_time का उपयोग करता है।

<?php the_time(get_option('date_format')); ?>

अधिक जानकारी के लिए मैंने इसके बारे में एक ट्यूटोरियल यहाँ लिखा है: क्यों the_date () वर्डप्रेस में फ़ंक्शन केवल पहले पोस्ट पर एक बार दिखाता है


कृपया ध्यान दें कि यदि आप अपने स्वयं के उत्पाद / ब्लॉग को बढ़ावा देना चाहते हैं, तो आपको अपनी संबद्धता का खुलासा करना होगा , अन्यथा आपके उत्तर को स्पैम के रूप में चिह्नित किया जा सकता है। कृपया पढ़ें कि स्पैमर कैसे न हो
डेविडपॉस्टिल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.