Как получить ID родительского поста?

25 апр. 2013 г., 10:06:19
Просмотры: 17.6K
Голосов: 3

У меня есть шаблон, который выводит записи блога (Страница блога). Когда я открываю одну из записей, которая использует шаблон single.php, как я могу получить ID её родителя (Страницы блога)?

Должен уточнить, что мне нужен этот ID, чтобы получить значение мета-поля страницы блога в single.php.

То же самое касается пользовательского типа записи, например 'project', где шаблон страницы выводит список проектов (Страница проектов), а single-project.php - для отдельного проекта. В этом случае мне нужно получить ID (Страницы проектов) в single-project.php.

11
Комментарии

Можете объяснить ситуацию? Почему вы хотите это получить?

Vinod Dalvi Vinod Dalvi
25 апр. 2013 г. 10:11:52

Родительский ID записи не является страницей блога, а другой записью. Нет связи между записью и вашей страницей блога.

Rajeev Vyas Rajeev Vyas
25 апр. 2013 г. 10:12:05

@VinodDalvi Я отредактировал вопрос.

metalzade metalzade
25 апр. 2013 г. 10:24:08

@RajeevVyas так ты говоришь, что нет способа получить ID страницы блога?

metalzade metalzade
25 апр. 2013 г. 10:24:56

@metalzade конечно есть, попробуй использовать get_option('page_for_posts') или посмотри функцию is_home в кодексе для справки.

Rajeev Vyas Rajeev Vyas
25 апр. 2013 г. 10:37:41

+1 за обновление вопроса с дополнительной информацией. Я все еще не совсем понимаю, что ты имеешь в виду. Если у тебя есть пользовательский тип записи, и он установлен как 'hierarchical', то ты можешь использовать get_post( $post->post_parent ). Если ты используешь 'страницу' для записей блога в настройках, то get_option('page_for_posts') даст тебе ID. Больше информации и, возможно, фрагмент кода помогут нам дать более точный ответ.

Mere Development Mere Development
25 апр. 2013 г. 10:45:54

@MereDevelopment Спасибо, ребята, get_option('page_for_posts') сработало для страницы блога, но для пользовательского типа записи $post->post_parent возвращает 0, что неверно. Я снова отредактировал вопрос.

metalzade metalzade
25 апр. 2013 г. 11:06:50

Вы смешиваете разные концепции. Родительский элемент иерархического пользовательского типа записи — это не то же самое, что страница, на которой отображаются записи.

anu anu
25 апр. 2013 г. 11:22:48

@anu Хорошо, теперь я понял. Но как ты думаешь, есть ли способ получить ID этой страницы в single-project.php?

metalzade metalzade
25 апр. 2013 г. 11:47:46

@metalzade связи нет, если вы не определите её явно. Например, если у вас есть 2 страницы, на которых перечислены одни и те же записи, какая из них должна быть 'родительской'? Таким образом, вы можете либо жестко прописать это, определить в конфигурации, либо сделать какое-то неявное предположение (например, выполнив поиск страницы, которая использует определенный шаблон)

anu anu
25 апр. 2013 г. 12:00:38

Разве вы не ищете хлебные крошки?

brasofilo brasofilo
25 апр. 2013 г. 15:01:12
Показать остальные 6 комментариев
Все ответы на вопрос 2
1

WordPress 5.7 представляет новую вспомогательную функцию для более удобного получения ID родительской записи: get_post_parent()

Её также можно использовать вместе с функцией has_post_parent(), что позволяет создать конструкцию вида:

<?php if ( has_post_parent() ) : ?>
    <a href="<?php the_permalink( get_post_parent() ); ?>">
        <?php
        echo sprintf(
            esc_html__( 'Вернуться к родительской странице: %s', 'text-domain' ),
            get_the_title( get_post_parent() )
        );
        ?>
    </a>
<?php endif; ?>

Обратите внимание, что эти функции принимают параметр "ID дочерней записи", который по умолчанию равен текущей записи.

https://make.wordpress.org/core/2021/02/10/introducing-new-post-parent-related-functions-in-wordpress-5-7/

10 февр. 2021 г. 23:09:25
Комментарии

"Эти функции изначально были представлены как get_parent_post() и has_parent_post(), но позднее были переименованы в get_post_parent() и has_post_parent()"

markdwhite markdwhite
11 июн. 2021 г. 05:37:59
3

Используйте $post->post_parent для получения ID родительской записи. Здесь $post — это объект со свойствами.

25 апр. 2013 г. 10:35:21
Комментарии

Мне удалось получить ID страницы блога с помощью get_option('page_for_posts'), но не получилось для пользовательского типа записи, так как $post->post_parent возвращает 0.

metalzade metalzade
25 апр. 2013 г. 11:09:40

У меня $post->post_parent работает. Выведите ваш объект $post, и вы увидите, что [post_parent] там присутствует.

saifur saifur
25 апр. 2013 г. 14:42:57

Возможно, вам стоит добавить global $post

Jack Jack
24 окт. 2016 г. 13:11:07