Вопрос или проблема
Я пытаюсь сделать динамическую кнопку, которая будет вести на страницу портфолио (независимо от того, какой у нее ID/название), сейчас это выглядит так:
$portfolio_page = get_option('theme_portfolio_page');
$portfolio_pid = get_page_by_title($portfolio_page);
<a href="https://wordpress.stackexchange.com/questions/85451/<?php echo get_option ("theme_portfolio_page') ?>">Вернуться</a>
Проблема в том, что ссылка основывается на названии страницы, и когда в названии есть пробел, это вызывает ошибки… Поэтому мне нужен код, который динамически связывает с страницей портфолио по ID.
Когда я пытаюсь изменить на get_page_by_id
ФАТАЛЬНАЯ ОШИБКА: ВЫЗОВ НЕОПРЕДЕЛЕННОЙ ФУНКЦИИ GET_PAGE_BY_ID() В /HOME/DOMAIN/WWW/WP-CONTENT/THEMES/MYTHEME/PORTFOLIO-TEMPLATE.PHP НА СТРОКЕ 46
Это происходит потому, что get_page_by_id
не является функцией в WordPress.
Вам нужна get_page
.
Попробуйте использовать пользовательские поля.
1. Добавьте ID страницы как значение пользовательского поля, например “page_id”.
Добавьте следующее в ваш шаблонный файл:
$post = get_post_meta( get_the_ID(), 'page_id', true );
Таким образом, вы получите ссылку на страницу в $post.
Затем используйте это в вашем теге анкоры как href:
<a href="https://wordpress.stackexchange.com/questions/85451/<?php echo $post ?>" > Что-то</a>
Надеюсь, это решит вашу проблему.
Ответ или решение
Чтобы динамически создать ссылку на страницу портфолио по идентификатору страницы, вы можете использовать функцию get_page()
в WordPress. Давайте рассмотрим, как это можно сделать:
-
Получите идентификатор страницы портфолио. Вы можете сохранить идентификатор страницы в опции темы, например, с помощью
update_option('theme_portfolio_page_id', $page_id);
, и затем получать его с помощьюget_option()
. -
Используйте
get_page()
для получения данных страницы по ID. Вместо неполной функции, о которой вы говорили, являетсяget_page_by_title
, вы можете использовать идентификатор, чтобы получить всю необходимую информацию о странице.
Вот пример кода, который будет работать:
// Получаем ID страницы портфолио из опций
$portfolio_pid = get_option('theme_portfolio_page_id');
// Если ID существует, получаем страницу
if ($portfolio_pid) {
$portfolio_page = get_page($portfolio_pid);
// Проверяем, существует ли такая страница
if ($portfolio_page) {
$portfolio_link = get_permalink($portfolio_page->ID); // Получаем постоянную ссылку на страницу
} else {
$portfolio_link = '#'; // Запасной вариант, если страница не найдена
}
} else {
$portfolio_link = '#'; // Запасной вариант, если ID не задан
}
// Выводим ссылку на страницу портфолио
echo '<a href="' . esc_url($portfolio_link) . '">Вернуться</a>';
Пояснения:
-
get_option('theme_portfolio_page_id')
: Здесь мы получаем ID страницы портфолио, который ранее был установлен как опция темы. -
get_page($portfolio_pid)
: Эта функция возвращает объект страницы по ID. Если страница существует, мы получаем ее permalink с помощьюget_permalink($portfolio_page->ID)
. -
Экранирование ссылок: Используется
esc_url()
, чтобы убедиться, что конечная ссылка безопасна для вывода. -
Запасные варианты: Если по каким-то причинам ID не установлен или страница не найдена, мы возвращаем
#
, чтобы избежать ошибок.
Этот метод обеспечит вам правильную работу ссылки на страницу портфолио вне зависимости от её названия или наличия пробелов.