the_date() не работает

18 мая 2012 г., 00:07:54
Просмотры: 35.9K
Голосов: 24

Я использую WordPress 3.2 и делаю запрос постов следующим образом:

<?php query_posts("posts_per_page=1post=type&page=post_parent=10");?>

Затем я пытаюсь вывести дату запрошенного поста так:

<?php echo the_date(); ?>

Выводится заголовок поста, отрывок и постоянная ссылка, но дата не отображается. В чем может быть проблема? Уверен, что причина довольно простая.

Вот код в файле шаблона для страницы видео:

    <?php query_posts("posts_per_page=1post=type&page=post_parent=10");?>
    <h2>Последнее видео</h2>
    <h3 class="date"><?php echo the_date(); ?></h3>
    <p><strong><?php echo the_title(); ?></strong><?php echo the_excerpt(); ?></p>
    <p><a href="<?php echo the_permalink(); ?>" class="more2">Смотреть</a></p>

Вот попытка поместить запрос в цикл:

<?php query_posts("posts_per_page=1post=type&page=post_parent=10");?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<h2>Последнее видео</h2>
<h3 class="date"><?php echo the_date(); ?></h3>
<p><strong><?php echo the_title(); ?></strong><?php echo the_excerpt(); ?></p>
<p><a href="<?php echo the_permalink(); ?>" class="more2">Смотреть</a></p>
<?php endwhile; else: ?>
<p><?php _e('Извините, записей соответствующих вашим критериям не найдено.'); ?></p>
<?php endif; ?>

the_date() не работает, но the_title() и другие функции работают. Кстати, это изменило мой запрос на the_post(), что не то, что мне нужно. Я хочу запросить последнее видео, как я сделал выше цикла.

Кстати, я использовал функцию the_date раньше на странице, и она работала. Может ли это быть проблемой? Вот код, который был до проблемного участка:

<div id="col75" class="firstcol">
    <iframe id="video" src="http://www.youtube.com/embed/videoseries?list=<?php print get_post_meta($post->ID,"playlist_id", true); ?>" width='560' height='350' frameborder="0"></iframe>
    <div id="col25">
        <h2><?php echo get_post_meta($post->ID,"speaker", true); ?></h2>
        <h3 class="date"><?php echo the_date(); ?></h3>
0
Все ответы на вопрос 5
3
65

Смотрите особое примечание об использовании `the_date'

ОСОБОЕ ПРИМЕЧАНИЕ: Когда на странице есть несколько записей, опубликованных в ОДИН И ТОТ ЖЕ ДЕНЬ, the_date() отображает дату только для первой записи (то есть для первого экземпляра the_date()). Чтобы повторять дату для записей, опубликованных в тот же день, следует использовать шаблонный тег the_time() или get_the_date() (начиная с версии 3.0) с форматом строки, специфичным для даты. Используйте для добавления даты, установленной в интерфейсе администратора.

  1. Вы используете query_posts, что нарушает работу глобальных переменных
  2. Вы выводите функцию, которая уже сама печатает в браузер

    • Фактически, вы делаете так для всех ваших шаблонных тегов.
    • Измените echo the_date(); на: echo get_the_date('F j, Y');
    • Уберите echo из ваших шаблонных тегов, которые уже выводят в браузер, или используйте альтернативные функции, которые возвращают значение.
  3. Используйте новый WP_Query или get_posts вместо query_posts

  4. Читайте Кодекс. В нём рассказывается, как использовать все эти функции, и это очень полезно :)

18 мая 2012 г. 00:47:16
Комментарии

get_the_date() решил мою проблему, но теперь get_the_date() в sidebar.php не работает.

zachdyer zachdyer
18 мая 2012 г. 01:06:53

Еще одна жертва query_posts

Chris_O Chris_O
18 мая 2012 г. 01:07:55

Теперь все работает, но мне пришлось использовать теги echo. Вот почему это не работало в моем sidebar.php.

zachdyer zachdyer
18 мая 2012 г. 01:22:13
3
21

the_date() выводит дату только в том случае, если ранее эта же дата не была выведена.
Нет, это не согласуется с другими похожими функциями. Но именно так работало в предшественнике WordPress — b2/cafelog, а обратная совместимость всегда важнее логики... :)

Для вывода даты всегда используйте get_the_date()

<?php echo get_the_date(); ?>

или

<?php echo mysql2date( get_option( 'date_format' ), $post->post_date); ?>
18 мая 2012 г. 00:31:29
Комментарии

НЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕТ. Теперь мой сайдбар get_the_date сломан. Что там произошло?

zachdyer zachdyer
18 мая 2012 г. 01:00:22

Смотрите ответ Cris_O и не используйте query_posts(). :)

fuxia fuxia
18 мая 2012 г. 01:04:18

Вы используете query_posts, что ломает ваши глобальные переменные. Смотрите мой ответ ниже.

Chris_O Chris_O
18 мая 2012 г. 01:04:36
1

Я думаю, что это должно выполняться внутри условия while( have_posts() ):

while ( have_posts() ) : the_post();
    echo '<li>';
    the_date();
    echo '</li>';
endwhile;
18 мая 2012 г. 00:09:39
Комментарии

Как мне просто вывести дату записи? Это всё, что мне нужно сделать? Я запросил только одну запись.

zachdyer zachdyer
18 мая 2012 г. 00:12:51
1

Для работы определённых функций необходимо инициализировать цикл. На страницах Codex указано, что эти функции не будут работать корректно вне цикла.

18 мая 2012 г. 00:21:36
Комментарии

Нет, это не работает, я опубликовал код того, что я сделал, в посте.

zachdyer zachdyer
18 мая 2012 г. 00:27:44
0
// Это не будет показывать дату во всех случаях
the_date( 'F d, Y' );

// Это будет показывать дату во всех случаях  
the_time( 'F d, Y' );
24 июн. 2016 г. 12:54:19