Я думал, что у меня это было сразу после прочтения многих статей SO, но я продолжаю получать ошибки. По сути, в моем шаблоне страницы content.php я хотел отобразить другой тег статьи в зависимости от того, находитесь ли вы на странице архива или отдельной публикации. Итак, я делал что-то вроде этого:
<?php if ( is_archive() ) {
echo '<article id = "post-' . the_ID() . '">';
} else {
echo '<article id = "post-' . the_ID() . ' . "post_class() . '">';
}
?>
Но то, что происходит здесь, вместо того, чтобы выдавать идентификатор на странице, поэтому итоговый HTML-код выглядит так:
1234<article id = "post-">Content Goes Here</article>
когда это должно быть ....
<article id = "post-1234">Content Goes Here</article>
так почему это не появляется правильно?






the_ID() (и довольно много других функций WP) имеет вариант get_the_ID(), который вы захотите использовать здесь. the_ID() создает собственное внутреннее эхо; get_the_ID()возвращается это.
Просто измените свой код на: the_ID() по умолчанию имеет параметр echo true, поэтому он печатает идентификатор, но get_the_ID() возвращает идентификатор, который объединяется с вашим html-кодом. Вы можете получить более подробную информацию, нажав здесь. А также удалили двойные цитаты из части else после функции post_class().
<?php if ( is_archive() ) {
echo '<article id = "post-' . get_the_ID() . '">';
} else {
echo '<article id = "post-' . get_the_ID() . '". post_class() .'>';
}
?>
Я это вижу, но после добавления этого кода я получил еще одну ошибку для кода, который раньше был хорош. Ошибка: Ошибка синтаксического анализа: ошибка синтаксиса, неожиданный '<' в / www / webroot / mysite / wordpress / wp-content / themes / orchestra / te mplate-parts / content .php в строке 19 Этот код: < ? php the_title (sprintf ('<h2 class = "entry-title"> <a href = "%s" rel = "bookmark">', esc_url (get_permalink ())), '</a> </h2> '); ?>
Кроме того, если я поменяю местами эти два оператора эха, эта ошибка появится в строке 14, которая в настоящее время является первым оператором эха, у которого нет post_class () в конце.
Да, избавляюсь от. post_class (). ' сработало, но почему?
<? php the_title (sprintf ('<h2 class = "entry-title"> <a href = "%s" rel = "bookmark">', esc_url (get_permalink ())), '</a> </ h2 > '); ?> ошибка для этой строки синтаксическая и не имеет ничего общего с предыдущей.
post_class () добавлен в устаревшем виде. Вы должны быть очень внимательны, когда используете одинарные и двойные кавычки в выражении echo. Закрытие и открытие должно происходить надлежащим образом.
Я подошел ближе, используя такой код: echo '<article id = "post-'. Get_the_ID (). '"'. post_class (). '>'; Таким образом, код класса появляется, но снова за пределами тега архива. Так что это беспорядок.