Ссылка на страницу портфолио по ID вместо имени.

Вопрос или проблема

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

  1. Получите идентификатор страницы портфолио. Вы можете сохранить идентификатор страницы в опции темы, например, с помощью update_option('theme_portfolio_page_id', $page_id);, и затем получать его с помощью get_option().

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

Пояснения:

  1. get_option('theme_portfolio_page_id'): Здесь мы получаем ID страницы портфолио, который ранее был установлен как опция темы.

  2. get_page($portfolio_pid): Эта функция возвращает объект страницы по ID. Если страница существует, мы получаем ее permalink с помощью get_permalink($portfolio_page->ID).

  3. Экранирование ссылок: Используется esc_url(), чтобы убедиться, что конечная ссылка безопасна для вывода.

  4. Запасные варианты: Если по каким-то причинам ID не установлен или страница не найдена, мы возвращаем #, чтобы избежать ошибок.

Этот метод обеспечит вам правильную работу ссылки на страницу портфолио вне зависимости от её названия или наличия пробелов.

Оцените материал
Добавить комментарий

Капча загружается...