Можно ли получить ссылку на страницу из ее пули?
Возможно ли получить постоянную ссылку страницы из пули? Я знаю, что вы можете получить постоянную ссылку страницы из идентификатора, используя 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>
6 ответов
Ты говоришь о Странах? Нет сообщений.
Это то, что вы ищете:
-
get_permalink (get_page_by_path ('map'))
-
get_permalink (get_page_by_title ('Карта'))
-
home_url ('/map /')
Я думаю, что это может быть лучше:
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
Это метод, опубликованный 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
).
принятый ответ неверен, потому что иерархические страницы не работают так. Проще говоря, слизень - это не всегда путь к странице или сообщению. Например. ваша страница имеет дочерний элемент и т. д. путь будет 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>
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
Попробуйте следующее:
<a href = "<? php echo get_page_link (get_page_by_path ('map'));?>"> Карта </a>
get_page_by_path ('path')
возвращает объект страницы /сообщения, который затем может использоваться get_page_link ()
, поскольку он принимает объект post /page и возвращает постоянную ссылку.