Можно ли получить ссылку на страницу из ее пули?

Возможно ли получить постоянную ссылку страницы из пули? Я знаю, что вы можете получить постоянную ссылку страницы из идентификатора, используя get_page_link ():

<a href = "<? php echo get_page_link (40); & quot; & quot; & quot; Карта </a>

Мне любопытно, есть ли способ сделать то же самое с slug страницы - вот так:

<a href = "<? php echo get_page_link ('map');>"> Карта </a>
94 голоса | спросил Sampson 7 TueEurope/Moscow2010-12-07T20:09:07+03:00Europe/Moscow12bEurope/MoscowTue, 07 Dec 2010 20:09:07 +0300 2010, 20:09:07

6 ответов


145

Ты говоришь о Странах? Нет сообщений.

Это то, что вы ищете:

  1. get_permalink (get_page_by_path ('map'))
  2. get_permalink (get_page_by_title ('Карта'))
  3. home_url ('/map /')
ответил zeo 7 TueEurope/Moscow2010-12-07T21:19:31+03:00Europe/Moscow12bEurope/MoscowTue, 07 Dec 2010 21:19:31 +0300 2010, 21:19:31
8

Я думаю, что это может быть лучше:

function get_page_by_slug ($ page_slug, $ output = OBJECT, $ post_type = 'page') {
    глобальный $ wpdb;
    $ page = $ wpdb-> get_var ($ wpdb-> prepare ("SELECT ID FROM $ wpdb-> posts WHERE post_name =% s AND post_type =% s", $ page_slug, $ post_type));
    if ($ page)
            return get_page ($ page, $ output);
    return null;
}

, следуя шаблону «оригинал» get_page_by_title wordpress . (строка 3173)

Rgds

ответил Matheus Eduardo 28 FebruaryEurope/MoscowbMon, 28 Feb 2011 18:21:55 +0300000000pmMon, 28 Feb 2011 18:21:55 +030011 2011, 18:21:55
6

Это метод, опубликованный Tom McFarlin в своем блоге :

/**
 * Возвращает постоянную ссылку для страницы на основе входящего пула.
 *
 * @param string $ slug Пул страницы, на которую мы собираемся ссылаться.
 * @return string Постоянная ссылка на страницу
 * @since 1.0
 * /
function wpse_4999_get_permalink_by_slug ($ slug, $ post_type = '') {

    //Инициализировать значение постоянной ссылки
    $ permalink = null;

    //Создаем аргументы для WP_Query
    $ args = array (
        'name' => $ Слизняк,
        'max_num_posts' => 1
    );

    //Если задан необязательный аргумент, добавьте его в массив аргументов
    if (''! = $ post_type) {
        $ args = array_merge ($ args, array ('post_type' => $ post_type));
    }

    //Запустите запрос (и сбросьте его)
    $ query = new WP_Query ($ args);
    if ($ query-> have_posts ()) {
        $ Query- > the_post ();
        $ permalink = get_permalink (get_the_ID ());
        wp_reset_postdata ();
    }
    return $ permalink;
}

Он работает с настраиваемыми типами сообщений и встроенными типами сообщений (например, post и page).

ответил shea 1 FebruaryEurope/MoscowbFri, 01 Feb 2013 01:19:43 +0400000000amFri, 01 Feb 2013 01:19:43 +040013 2013, 01:19:43
1

принятый ответ неверен, потому что иерархические страницы не работают так. Проще говоря, слизень - это не всегда путь к странице или сообщению. Например. ваша страница имеет дочерний элемент и т. д. путь будет parent-slug /child-slug и get_page_by_path не сможет найти child-slug таким образом , Правильное решение таково:

mycoolprefix_post_by_slug ($ the_slug, $ post_type = "page") {
 $ args = array (
   'name' => $ The_slug,
   'post_type' => $ Post_type,
   'post_status' => 'публиковать',
   'numberposts' => 1
 );
 $ my_page = get_posts ($ args) [0];
 return $ my_page;
}

<a href = "<? php echo mycoolprefix_post_by_slug ('map');>"> Карта </a>
ответил Toskan 2 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 02 Sep 2017 01:10:53 +0300 2017, 01:10:53
0
function theme_get_permalink_by_title ($ title) {

    //Инициализировать значение постоянной ссылки
    $ permalink = null;

    //Попробуйте получить страницу по входящему заголовку
    $ page = get_page_by_title (strtolower ($ title));

    //Если страница существует, давайте получим ее постоянную ссылку
    if (null! = $ page) {
        $ permalink = get_permalink ($ page-> ID);
    } //завершение if

    return $ permalink;

} //end theme_get_permalink_by_title

Используйте эту функцию

if (null == theme_get_permalink_by_title ('Регистрация для этого сайта')) {
  //Постоянная ссылка не существует, поэтому справляйтесь с этим, но лучше всего подойдет.
} else {
  //Страница существует, поэтому сделайте то, что вам нужно сделать.
} //end if /else
ответил user46487 11 22014vEurope/Moscow11bEurope/MoscowTue, 11 Nov 2014 07:49:51 +0300 2014, 07:49:51
0

Попробуйте следующее:

<a href = "<? php echo get_page_link (get_page_by_path ('map'));?>"> Карта </a>

get_page_by_path ('path') возвращает объект страницы /сообщения, который затем может использоваться get_page_link (), поскольку он принимает объект post /page и возвращает постоянную ссылку.

ответил Sigma Wadbude 26 FebruaryEurope/MoscowbMon, 26 Feb 2018 14:54:08 +0300000000pmMon, 26 Feb 2018 14:54:08 +030018 2018, 14:54:08

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132