একই তারিখ সহ অন্য কোনও পোস্ট থাকলে পোস্টের তারিখটি দেখায় না


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 সাল থেকে বর্তমান - পিএইচপিডকব্লক কমপক্ষে এটি যা বলেছে: আপনি কেন কোনও সংরক্ষণাগারে প্রতিটি পোস্টের জন্য তারিখটি প্রদর্শন করতে চান? একটি সংরক্ষণাগার এটির মতো দেখাচ্ছে:

+--------------+
| 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
@ নীলাম্বর গৃহীত উত্তরটি টিএল; ডাঃ সংস্করণ এবং সম্পূর্ণ সূক্ষ্ম :)
কায়সার

এই @ কাইজারটি খননের জন্য প্রপসগুলি - এ জাতীয় জাগতিক ইস্যুতে আমি প্রত্যাশার চেয়ে আরও অন্তর্দৃষ্টি
সেরোসেস

1
এই উত্তরটি ডাব্লুপি ডক্সের ব্যাখ্যার চেয়ে ভাল।
ইয়ান

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

এটি কেবল একবার প্রদর্শিত হবে কারণ ডায়েরিটি কীভাবে কাজ করবে। এটি শীর্ষে তারিখটি প্রদর্শন করবে এবং আপনি নীচে আপনার এন্ট্রিগুলি লিখবেন। টাইমটাইম ব্যবহার করে প্রতিটি পোস্টের জন্য তারিখগুলি প্রদর্শন করে আমি এই কোডটি ব্যবহার করি।

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

আরও তথ্যের জন্য আমি এটি সম্পর্কে এখানে একটি টিউটোরিয়াল লিখেছিলাম: কেন ওয়ার্ডপ্রেসে the_date () ফাংশন কেবল প্রথম পোস্টে একবার দেখায়


আপনি নিজের পণ্য / ব্লগ প্রচার করতে চান দয়া করে নোট করুন আপনার অবশ্যই অনুমোদিততা প্রকাশ করতে হবে , অন্যথায় আপনার উত্তর স্প্যাম হিসাবে চিহ্নিত করা যেতে পারে। অনুগ্রহ করে কীভাবে স্প্যামার না হবেন তা
ডেভিডপস্টিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.