Bài đăng không hiển thị ngày nếu có bài đăng khác có cùng ngày


19

Tôi có loại bài tùy chỉnh "báo chí." và tạo một mẫu trang các bài đăng truy vấn thuộc loại đó. Các bài đăng được cho là hiển thị ngày được công bố, nhưng nếu có nhiều hơn một bài đăng có cùng ngày, chỉ bài đăng đầu tiên hiển thị ngày và những bài khác thì không. Có cách nào để hiển thị ngày của mỗi bài viết?

nhập mô tả hình ảnh ở đây

<?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(); ?>

Câu trả lời:


40

Tôi đã đối mặt với vấn đề tương tự trong quá khứ bởi vì tôi đã sửa đổi chức năng ngày của tôi. Và sau đó các bài đăng được hiển thị ngày nếu chỉ mỗi bài đăng có ngày khác nhau nếu không nó sẽ trả về trống.

<?php echo get_the_date(); ?>Thay vào đó hãy thử thêm .


26

Tại sao nó không hiển thị?

Khi bạn nhìn vào nguồn của the_date()hàm, sau đó bạn sẽ thấy hai quả cầu:

global $currentday, $previousday;

Và sau đó có một quy tắc nếu có một ngày để hiển thị ... hay không. Kiểm tra tương tự như kiểm tra được thực hiện với is_new_day():

if ( $currentday != $previousday ) {

    // show date

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

Như bạn có thể thấy, $previousdayngay lập tức được đặt thành $currentday;. Vì vậy, nó được echo-ed một lần. Ngay sau đó, cả hai ngày đều giống nhau và kiểm tra sẽ thất bại. Đó là lý do tại sao bài đăng đầu tiên của bạn hiển thị nó, nhưng những người khác không hiển thị nó.

Tại sao nó hiển thị?

Nếu bạn tự hỏi tại sao nó lại hiển thị nhiều hơn một ngày, sau khi toàn cầu được xuất tinh, thì bạn sẽ phải xem quasetup_postdata() . Hàm này được gọi bởi the_post();và chịu trách nhiệm thiết lập mọi thứ cho một bài đăng trong vòng lặp.

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

        // your loop stuff here
    }
}

Nội bộ của setup_postdata()khá dễ hiểu (ít nhất là với những gì toàn cầu được thiết lập):

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

Vì vậy, phần chuyển động là $previousdaydựa vào đó $currentdaytoàn cầu được thiết lập và kiểm tra. Và trừ khi có ngày mới , the_date()sẽ không hiển thị bất cứ điều gì.

Chỉ cần đặt bài đăng của bạn thành những ngày hoàn toàn khác nhau và đột nhiên bạn sẽ thấy ngày xuất hiện trên mỗi bài đăng.

Ý tưởng đằng sau đó là gì?

Trên thực tế, ý tưởng này khá đơn giản và hiện tại kể từ v0.7.1 - ít nhất đây là những gì phpDocBlock nêu: Tại sao bạn muốn hiển thị ngày cho mỗi bài đăng trong kho lưu trữ? Một kho lưu trữ trông như thế này:

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

Bạn không đồng ý với điều đó? Chà, sau đó bạn chỉ đơn giản là sử dụng một chức năng được dự định là một cái gì đó hoàn toàn khác.

Tại sao làm get_the_date()việc và làm thế nào để sử dụng nó đúng cách

Nó không bị ảnh hưởng bởi if / other trong the_date()hàm (kiểm tra toàn cục). Nó cũng không có bộ lọc. Làm thế nào để khắc phục điều đó? Đơn giản:

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

Điều này thêm bất kỳ cuộc gọi lại nào được gắn vào the_datebộ lọc vào đầu ra tùy chỉnh của bạn. Nó cũng sử dụng date_formatcài đặt tùy chọn mặc định làm mặc định - cũng được sử dụng the_date(). Và nó tránh bất kỳ beforeaftercác giá trị - một lần nữa, chính xác như the_date()hàm.


1
Cảm ơn kaiser. Điều đó giải thích tại sao đôi khi nó không in được ngày. Cảm ơn rất nhiều.
Robert hue

1
Giải thích rất toàn diện. Tốt hơn so với câu trả lời được chấp nhận.
Nilambar Sharma

1
@Nilambar Câu trả lời được chấp nhận là phiên bản tl; dr và hoàn toàn ổn :)
kaiser

đạo cụ để đào sâu vào @kaiser này - cái nhìn sâu sắc hơn tôi từng mong đợi về một vấn đề trần tục như vậy
serraosays

1
Câu trả lời này tốt hơn lời giải thích của tài liệu WP.
Ian

10

Đừng sử dụng the_date(), thay vào đó hãy sử dụng the_time().

the_date chỉ trả về ngày, the_time trả về ngày + thời gian. Tôi không biết lý do tại sao wordpress sẽ không trở lại nhiều hơn một ngày khi the_dateđược sử dụng trong một vòng lặp. Nhưng nó phải làm với thực tế là giá trị là như nhau. Nếu bạn sử dụng the_timegiá trị không bao giờ giống nhau, do đó nó luôn trả về giá trị. Vì vậy, bạn có thể in một cái gì đó như<?php the_time('F j, Y'); ?>

Liên kết này từ codex, giải thích cách thức hoạt động tốt hơn nhiều so với tôi.


1

Vũ phu nó.

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

Làm việc cho tôi, hiển thị đầy đủ ngày, thời gian cho mỗi bài viết bất kể đó là cùng một ngày hay không.


0

Nó chỉ xuất hiện một lần bởi vì đó là cách một cuốn nhật ký sẽ hoạt động. Nó sẽ hiển thị ngày ở trên cùng và bạn sẽ viết các mục của bạn bên dưới nó. Tôi sử dụng mã này để hiển thị nó ngày cho mỗi bài viết bằng cách sử dụng the_time.

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

Để biết thêm thông tin, tôi đã viết một hướng dẫn về nó ở đây: Tại sao Hàm_date () trong WordPress chỉ hiển thị một lần trên bài đăng đầu tiên


Xin lưu ý nếu bạn muốn quảng bá sản phẩm / blog của riêng mình, bạn phải tiết lộ liên kết của mình , nếu không câu trả lời của bạn có thể bị gắn cờ là spam. Vui lòng đọc Làm thế nào để không trở thành người gửi thư rác
DavidPostill
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.