Вопрос или проблема
Я создал пользовательский тип записи для местоположений на своем сайте и хотел бы отображать каждую запись полностью с помощью шорткода. Я довольно нов в создании шорткодов и борюсь с пониманием этого. Я хочу отображать запись по слагу вот так: [stefan_location slug=”Aspley”], но у меня не получается это сделать. Я знаю, что, наверное, очень далек от правильного решения, поэтому любые советы будут приветствоваться!!
function cpt_content_func($atts){
$post="";
$content="";
extract( shortcode_atts( array(
'slug' => null,
), $atts ) );
$args = array(
'name' => $slug,
'post_type' => 'location',
'numberposts' => 1
);
$post = get_posts( $args );
if ( !empty( $post ) ) {
$content = $post[0]->post_content;
}
return $content;
}
add_shortcode('stefan_location','stefan_location');
- Вы ввели второй параметр в add_shortcode неверно, вам не хватает вызываемой функции в параметре.
- Как показано ниже, добавьте этот шорткод с параметром.
add_shortcode( string $tag, callable $callback );
Код :
function cpt_content_func($atts){
$post="";
$content="";
extract( shortcode_atts( array(
'slug' => null,
), $atts ) );
$args = array(
'post_type' => 'location',
'posts_per_page' => 1,
'post_name__in' => $atts['slug'] );
$post = get_posts( $args );
if ( !empty( $post ) ) {
$content = $post[0]->post_content;
}
return $content;
}
add_shortcode('stefan_location','cpt_content_func');
Ответ или решение
Чтобы отобразить записи кастомного типа на вашем сайте WordPress с помощью короткого кода, необходимо создать правильный PHP-код для обработки шорткода, который вы хотите использовать. В данном случае вы хотите использовать шорткод вида [stefan_location slug="Aspley"]
для отображения записи с определённым слагом. Давайте разберемся, как это сделать шаг за шагом.
1. Создание функции для шорткода
Основная задача функции заключается в том, чтобы извлечь слаг из атрибутов шорткода и вернуть содержимое соответствующего поста. Давайте рассмотрим исправленный код:
function cpt_content_func($atts){
$atts = shortcode_atts( array(
'slug' => null,
), $atts );
if (empty($atts['slug'])) {
return 'Ошибка: отсутствует слаг.';
}
$args = array(
'post_type' => 'location',
'name' => $atts['slug'],
'posts_per_page' => 1,
);
$post = get_posts($args);
$content = '';
if (!empty($post)) {
$content = apply_filters('the_content', $post[0]->post_content); // Применяем фильтры содержимого
} else {
$content = 'Запись не найдена.';
}
return $content;
}
add_shortcode('stefan_location', 'cpt_content_func');
2. Объяснение кода
- Функция
shortcode_atts
: Эта функция позволяет установить значению атрибутов значение по умолчанию. Если слаг не указан, будет возвращено сообщение об ошибке. - Параметры
$args
: Указываем, что нам нужны посты типаlocation
с заданным слагом. Используемposts_per_page
для ограничения количества записей до одной. get_posts
: Функция, которая получает массив постов на основе заданных аргументов.- Контент: Если пост существует, мы обрабатываем его содержимое через
apply_filters('the_content', ...)
для применения всех встроенных фильтров и шорткодов. Если пост не найден, выводится сообщение об этом.
3. Использование шорткода
Теперь, когда вы сохранили этот PHP-код в файле вашей темы (например, в functions.php
), вы можете использовать шорткод в редакторе постов или страниц:
[stefan_location slug="Aspley"]
4. Оптимизация для SEO
Не забудьте, что правильное использование метазаголовков и описаний в ваших кастомных записях также сыграет важную роль в SEO. Убедитесь, что ваши кастомные записи имеют уникальный заголовок, описание, а также структурированные данные, если это необходимо.
Заключение
С помощью этого кода вы сможете эффективно отображать содержание своих кастомных записей по слагу, используя шорткод. Если у вас есть дополнительные вопросы или требуется более сложный функционал, не стесняйтесь задавать.