Получение содержимого страницы используя slug
Я пытаюсь получить содержимое страницы, когда мне известна только строка slug.
Существует ли функция для этого, или простой способ это сделать, или это случай, когда нужно использовать SQL?
Заранее спасибо

Используйте функцию 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'
. В этом случае вы можете получить более одного результата, так как ярлыки не уникальны для разных типов записей.

Если на странице с указанным ярлыком (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;

Вы можете получить страницу по её заголовку с помощью функции 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('мой-ярлык'));

Используйте 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
