Получение содержимого страницы используя slug

6 окт. 2012 г., 23:08:47
Просмотры: 52.4K
Голосов: 14

Я пытаюсь получить содержимое страницы, когда мне известна только строка slug.

Существует ли функция для этого, или простой способ это сделать, или это случай, когда нужно использовать SQL?

Заранее спасибо

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

Используйте функцию get_posts() с параметром name, который указывает на ярлык (slug) записи:

$page = get_posts([ 'name' => 'your-slug' ]);

if ( $page )
{
    echo $page[0]->post_content;
}

Учтите, что тип записи в get_posts() по умолчанию имеет значение 'post'. Если вам нужна страница, используйте:

$page = get_posts([
    'name'      => 'your-slug',
    'post_type' => 'page'
]);

Если вы хотите получить все публичные типы записей (кроме вложений), укажите тип записи как 'any'. В этом случае вы можете получить более одного результата, так как ярлыки не уникальны для разных типов записей.

6 окт. 2012 г. 23:24:53
0

Если на странице с указанным ярлыком (slug)

Ознакомьтесь с условными тегами:
is_page() также принимает ярлык в качестве аргумента.

Таким образом,

if( is_page( 'your-slug' ) ) {
     // получить контент
}

сделает то, что вам нужно.

Если на другой странице

Если вас интересует, как получить контент записи/страницы по ярлыку, когда вы находитесь не на этой странице, вы также можете передать ярлык в get_posts. Это не документировано в кодексе.

Следующий код получит ID по ярлыку:

$args = array(
    'name' => 'your-slug'
);
$posts_from_slug = get_posts( $args );

// вывести полученный контент
echo $posts_from_slug[0]->post_content;
6 окт. 2012 г. 23:17:47
0

Вы можете получить страницу по её заголовку с помощью функции get_page_by_title().

Вот как можно её использовать (если вы хотите вывести содержимое страницы):

$page = get_page_by_title('Ваш заголовок'); 
$content = apply_filters('the_content', $page->post_content);
echo $content;

Кстати, чтобы получить страницу по её ярлыку (slug):

function get_page_id_by_slug($slug){
    global $wpdb;
    $id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = '".$slug."'AND post_type = 'page'");
    return $id;
}

$page = get_post(get_page_id_by_slug('мой-ярлык'));
6 окт. 2012 г. 23:30:04
0

Используйте get_page_by_path для получения объекта WP_Post, после чего вы можете извлечь содержимое записи и отфильтровать его для вывода в HTML, если это необходимо.

Синтаксис

get_page_by_path( string $page_path, string $output = OBJECT, string|array $post_type = 'page' )

Пример:

Я использую этот код при заполнении шаблона темы из страницы, чтобы гарантировать, что содержимое будет отображено как HTML:

<?php
$about = get_page_by_path('about'); 
$content = apply_filters( 'the_content', $about->post_content ); 
echo $content;
?>

Чтобы получить запись другого типа, передайте два дополнительных параметра:

get_page_by_path('cat', OBJECT, 'animal');

Для дополнительной информации см. Справочник функций WordPress

Параметры

21 окт. 2015 г. 09:09:17