Как получить текущий ID страницы и использовать его в функции get_page?

26 янв. 2011 г., 12:12:38
Просмотры: 19.8K
Голосов: 3

Пример кода:

$page_id = 116; // 123 должен быть заменен на конкретный ID страницы с вашего сайта, который можно найти, наведя курсор на ссылку редактирования страницы в админ-панели. ID будет в строке запроса URL, например, page.php?action=edit&post=123.
$page_data = get_page( $page_id ); // Вы должны передать переменную в функцию get_page. Если передать значение напрямую (например, get_page ( 123 ); ), WordPress выдаст ошибку.

$content = apply_filters('the_content', $page_data->post_content); // Получаем контент и сохраняем фильтры WordPress, такие как теги параграфов. Источник: http://wordpress.org/support/topic/get_pagepost-and-no-paragraphs-problem
$title = $page_data->post_title; // Получаем заголовок
echo $title; // Выводим заголовок
echo $content; // Выводим контент
?>

Вместо 166 (который был введен вручную), я хотел бы получить ID текущей страницы.

Когда я использую $page_id = $post -> ID, он получает заголовок и содержимое первого поста из цикла ниже (это страница записей):

<div class="container">
                <?php // находим весь контент, который имеет тип видео, а затем делаем по нему цикл ?>
                <?php query_posts('showpost'); ?>

                <?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>

                                <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                                    <?php if ( is_front_page() ) { ?>
                                        <h2 class="entry-title"><?php the_title(); ?></h2>
                                    <?php } else { ?>
                                        <h1 class="entry-title"><?php the_title(); ?></h1>
                                    <?php } ?>

                                    <div class="entry-content">
                                        <?php the_content(); ?>
                                        <?php wp_link_pages( array( 'before' => '<div class="page-link">' . __( 'Pages:', 'twentyten' ), 'after' => '</div>' ) ); ?>
                                            <?php edit_post_link( __( 'Edit', 'twentyten' ), '<span class="edit-link">', '</span>' ); ?>
                                        </div><!-- .entry-content -->
                                    </div><!-- #post-## -->

                                    <?php comments_template( '', true ); ?>

                    <?php endwhile; ?>
        </div>

Я хотел бы динамически получить код текущей страницы (который равен 116).

Какой код нужен для этого?

0
Все ответы на вопрос 5
0

Из быстрого теста $wp_query->get_queried_object_id() должен получать ID страницы, когда эта страница установлена как страница записей.

Вероятно, проблема заключается в выборе правильного момента времени - достаточно позднего, чтобы данные были доступны, но достаточно раннего, чтобы цикл записей не мешал. Я бы попробовал получить это значение раньше (в хуке template_redirect или около того) и сохранить в глобальной переменной для последующего использования.

27 мар. 2011 г. 16:17:28
1
global $wp_query;
$page_id = $wp_query->get_queried_object_id();

но если вы используете пользовательскую страницу для записей, куда вы добавляете этот код?

26 янв. 2011 г. 13:59:21
Комментарии

Это страница, используемая для отображения записей блога.

wyc wyc
28 янв. 2011 г. 16:14:37
3

Есть два метода в зависимости от того, выполняете ли вы это внутри или вне цикла.

Внутри цикла: $page_id = $post->ID; (как вы уже упоминали, без успеха, поэтому я предположу, что вы пытаетесь использовать альтернативный вариант, который...)

Вне цикла: $page_id = $wp_query->post->ID;

26 янв. 2011 г. 12:52:50
Комментарии

Неважно, что я делаю, он всё равно выводит записи из цикла, который находится ниже этой функции.

wyc wyc
26 янв. 2011 г. 12:57:29

Если вы используете этот второй блок кода на той же странице, где находится функция get_page, то, скорее всего, проблема в функции query_posts, которая всё нарушает. Вам нужно либо создать пользовательский запрос, либо сбросить цикл. Попробуйте закомментировать второй блок в шаблоне (чтобы предотвратить выполнение PHP-кода) и посмотрите, поможет ли это.

Mike Hudson Mike Hudson
26 янв. 2011 г. 13:06:48

Неважно, удалю ли я второй цикл. Страница настроена как страница записей, поэтому, думаю, цикл применяется «глобально или что-то в этом роде».

wyc wyc
26 янв. 2011 г. 13:15:55
0

Я заменил:

$page_id = [id записи];

на:

$page_id = $wp_query->get_queried_object_id();

Сработало для меня!

7 окт. 2011 г. 20:46:40
0

Для тех, у кого это всё ещё не работает, вам нужно использовать какой-либо add_action (вы можете выбрать, какой именно хотите использовать). В моём примере это будет возвращать ID текущей страницы без каких-либо проблем, независимо от того, находится ли код в папке плагина, functions.php или где-либо ещё.

add_action('template_redirect', 'showid');

function showid(){
    global $wp_query;
    $theid = intval($wp_query->queried_object->ID);
    echo $theid;
}

Удачи и приятного программирования!

6 авг. 2021 г. 12:40:18