Можно ли получить ссылку на страницу из ее слага?
6 ответ
- голосов
-
- 2010-12-07
Вы ведь говорите о Pages?Не сообщения.
Это то,что вы ищете:
-
get_permalink( get_page_by_path( 'map' ) )
-
get_permalink( get_page_by_title( 'Map' ) )
-
home_url( '/map/' )
You're talking about Pages right? Not Posts.
Is this what you looking for:
get_permalink( get_page_by_path( 'map' ) )
get_permalink( get_page_by_title( 'Map' ) )
home_url( '/map/' )
-
Вы имели в виду `get_permalink (get_page_by_path ('contact') -> ID));`?Did you mean `get_permalink(get_page_by_path('contact')->ID));`?
- 4
- 2010-12-07
- Sampson
-
хммм нет?Что с ID?hmmm nope? What's with the ID?
- 1
- 2010-12-08
- zeo
-
[`get_page_by_path ()`] (http://codex.wordpress.org/Function_Reference/get_page_by_path) возвращает массив всей информации о странице.[`get_permalink ()`] (http://codex.wordpress.org/Function_Reference/get_permalink) принимает идентификатор страницы в качестве первого аргумента.Я думал,мне придется явно передать значение идентификатора.[`get_page_by_path()`](http://codex.wordpress.org/Function_Reference/get_page_by_path) returns an array of all page information. [`get_permalink()`](http://codex.wordpress.org/Function_Reference/get_permalink) takes a page ID as the first argument. I thought I'd have to explicitly pass the ID value.
- 3
- 2010-12-08
- Sampson
-
@Jonathan: Это не всегда документируется,но многие функции WP принимают как числовые идентификаторы,так и полные объекты сообщения в качестве аргумента.@Jonathan: It's not always documented, but many WP functions accept both numeric ID's and full post objects as the argument.
- 10
- 2010-12-08
- Jan Fabry
-
Кажется,чтоget_page_by_path () может быть довольно сложно использовать при работе с дочерними страницами ...It seems that get_page_by_path() can be quite complicated to use when dealing with child pages...
- 1
- 2011-11-14
- Kaaviar
-
По согласованию с Kaaviar,функция ниже лучше.Agreed with Kaaviar, the function below is better.
- 0
- 2012-08-10
- Rezen
-
Я использую 1 для своих дочерних страниц без проблем.Я действительно не вижу в этом сложностей.I use 1 for my child pages with no issue. I really don't see the complication with it.
- 0
- 2014-12-19
- Jeremy
-
home_url ('/map/') работал со мнойhome_url( '/map/' ) worked with me
- 0
- 2017-04-15
- Shady Mohamed Sherif
-
неправильный ответ,проголосуйте против нирваны,пожалуйста.Путь не такой,как у слизняка.Пример: у страницы есть родительская страница с именем `abc`,у самой страницы есть ярлык` 123`.Теперь путь - `abc/123`,путь -` 123`.Пожалуйста,удалите неправильный ответ.get_page_by_path ('123') не будет работать.wrong answer, downvote to nirvana please. The path is not the same like the slug. Example: a page has a parent page called `abc` the page itself has a slug of `123`. The path now is `abc/123` the slug is `123`. Please remove this wrong answer. `get_page_by_path( '123' )` wont work.
- 1
- 2017-09-01
- Toskan
-
В моем случае мне пришлось использовать первый,и он работал нормально,потому что второй (get_page_by_title) возвращал ссылку на другую публикацию (не страницу) с похожей (но не такой) слагом.Я не знаю,почему это происходило.In my case I had to use the first one and it worked fine, because the second one (get_page_by_title) was returning another post (not page) link with similar (but not the same) slug. I don't know why this was happening.
- 1
- 2019-06-10
- Adriana Hernández
-
- 2011-02-28
Думаю,это могло быть лучше:
function get_page_by_slug($page_slug, $output = OBJECT, $post_type = 'page' ) { global $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
I think this could be better:
function get_page_by_slug($page_slug, $output = OBJECT, $post_type = 'page' ) { global $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; }
following the pattern of "original"
get_page_by_title
of wordpress. (line 3173)rgds
-
Почему так лучше?Вы можете объяснить?Why would that be better? Can you explain?
- 11
- 2012-04-11
- julien_c
-
Последний комментарий - я думаю,что в sql должно быть еще одно условие: `functionget_page_by_slug ($page_slug,$ output=OBJECT,$post_type='page') {global $ wpdb;$page=$ wpdb->get_var ($ wpdb->prepare ("ВЫБРАТЬ ИДЕНТИФИКАТОР ИЗ $ wpdb->posts WHEREpost_name=% s ANDpost_type=% s ANDpost_status='publish'",$page_slug,$post_type));если ($page) returnget_page ($page,$ output);returnnull;} `Last comment - I think that sql needs to have one more condition: `function get_page_by_slug($page_slug, $output = OBJECT, $post_type = 'page' ) { global $wpdb; $page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type= %s AND post_status = 'publish'", $page_slug, $post_type ) ); if ( $page ) return get_page($page, $output); return null; }`
-
Почему?Он не создает полный объект сообщения только для того,чтобы получить идентификатор.Why? It doesn't generate a complete post object just to get the ID.
- 0
- 2013-01-09
- s_ha_dum
-
@webcitron Я думаю,это просто потому,что он следует исходному шаблону Wordpress,получая сообщение по «заголовку»,просто меняя его на «slug». (проверьте [ссылку] (http://core.trac.wordpress.org/browser/tags/3.1/wp-includes/post.php#L3173))@webcitron I think just because is following original pattern of Wordpress getting post by 'title', just changing for 'slug'. (check the [link](http://core.trac.wordpress.org/browser/tags/3.1/wp-includes/post.php#L3173))
- 0
- 2013-05-13
- Matheus Eduardo
-
Это хороший ответ.Это исключает вероятность того,что мошеннический плагин маскирует вашу страницу или неправильно фильтрует ее.Если вы вернете идентификатор из таблицы сообщений,тогда вы можете создать из него экземпляр `\ WP_Post`,и это будет разрешено непосредственно во всех функциях wordpress,которые проверяют другие значения.`\ WP_Post` также предоставляет методы напрямую для поиска наиболее связанных данных о публикации.This is a good answer. This bypasses the possiblity of a rogue plugin masking your page or incorrectly filtering it. If you return the id from the post table, then you can create an instance of `\WP_Post` from it, and that resolves directly in all of the wordpress functions that check for other values. `\WP_Post` also provides methods directly to find most related data about the post.
- 0
- 2018-03-23
- mopsyd
-
- 2013-01-31
Это метод,опубликованный Томом Макфарлином в своем блоге :
/** * Returns the permalink for a page based on the incoming slug. * * @param string $slug The slug of the page to which we're going to link. * @return string The permalink of the page * @since 1.0 */ function wpse_4999_get_permalink_by_slug( $slug, $post_type = '' ) { // Initialize the permalink value $permalink = null; // Build the arguments for WP_Query $args = array( 'name' => $slug, 'max_num_posts' => 1 ); // If the optional argument is set, add it to the arguments array if( '' != $post_type ) { $args = array_merge( $args, array( 'post_type' => $post_type ) ); } // Run the query (and reset it) $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
).This is a method published by Tom McFarlin on his blog:
/** * Returns the permalink for a page based on the incoming slug. * * @param string $slug The slug of the page to which we're going to link. * @return string The permalink of the page * @since 1.0 */ function wpse_4999_get_permalink_by_slug( $slug, $post_type = '' ) { // Initialize the permalink value $permalink = null; // Build the arguments for WP_Query $args = array( 'name' => $slug, 'max_num_posts' => 1 ); // If the optional argument is set, add it to the arguments array if( '' != $post_type ) { $args = array_merge( $args, array( 'post_type' => $post_type ) ); } // Run the query (and reset it) $query = new WP_Query( $args ); if( $query->have_posts() ) { $query->the_post(); $permalink = get_permalink( get_the_ID() ); wp_reset_postdata(); } return $permalink; }
It works with custom post types and built-in post types (such as
post
andpage
). -
- 2017-09-01
принятый ответ неверен,потому что иерархические страницы так не работают.Проще говоря,слаг - это не всегда путь к странице или публикации.Например.у вашей страницы есть дочерний элемент и т. д.,путь будет
parent-slug/child-slug
,аget_page_by_path
не сможет найтиchild-slug
таким образом.Правильное решение:function mycoolprefix_post_by_slug($the_slug, $post_type = "page"){ $args = array( 'name' => $the_slug, 'post_type' => $post_type, 'post_status' => 'publish', 'numberposts' => 1 ); $my_page = get_posts($args)[0]; return $my_page; } <a href="<?php echo mycoolprefix_post_by_slug('map'); ?>">Map</a>
the accepted answer is wrong because hierarchical pages don't work like that. Simply put, the slug is not always the path of the page or post. E.g. your page has a child etc. the path will be
parent-slug/child-slug
andget_page_by_path
will fail to findchild-slug
this way. The proper solution is this:function mycoolprefix_post_by_slug($the_slug, $post_type = "page"){ $args = array( 'name' => $the_slug, 'post_type' => $post_type, 'post_status' => 'publish', 'numberposts' => 1 ); $my_page = get_posts($args)[0]; return $my_page; } <a href="<?php echo mycoolprefix_post_by_slug('map'); ?>">Map</a>
-
- 2018-02-26
Попробуйте это:
<a href="<?php echo get_page_link( get_page_by_path( 'map' ) ); ?>">Map</a>
get_page_by_path( 'path' )
возвращает объект страницы/сообщения,который затем может использоватьсяget_page_link()
,поскольку он принимает объект сообщения/страницы и возвращает постоянную ссылку.Try This:
<a href="<?php echo get_page_link( get_page_by_path( 'map' ) ); ?>">Map</a>
get_page_by_path( 'path' )
returns page/post object which can be then used byget_page_link()
as it accepts post/page object and returns permalink.-
Пожалуйста,** [отредактируйте] свой ответ ** и добавьте пояснение: ** почему ** это может решить проблему?Please **[edit] your answer**, and add an explanation: **why** could that solve the problem?
- 2
- 2018-02-26
- fuxia
-
- 2014-11-11
function theme_get_permalink_by_title( $title ) { // Initialize the permalink value $permalink = null; // Try to get the page by the incoming title $page = get_page_by_title( strtolower( $title ) ); // If the page exists, then let's get its permalink if( null != $page ) { $permalink = get_permalink( $page->ID ); } // end if return $permalink; } // end theme_get_permalink_by_title
Используйте эту функцию
if( null == theme_get_permalink_by_title( 'Register For This Site' ) ) { // The permalink doesn't exist, so handle this however you best see fit. } else { // The page exists, so do what you need to do. } // end if/else
function theme_get_permalink_by_title( $title ) { // Initialize the permalink value $permalink = null; // Try to get the page by the incoming title $page = get_page_by_title( strtolower( $title ) ); // If the page exists, then let's get its permalink if( null != $page ) { $permalink = get_permalink( $page->ID ); } // end if return $permalink; } // end theme_get_permalink_by_title
Use this function by
if( null == theme_get_permalink_by_title( 'Register For This Site' ) ) { // The permalink doesn't exist, so handle this however you best see fit. } else { // The page exists, so do what you need to do. } // end if/else
Можно ли получить постоянную ссылку страницы только с помощью слага?Я знаю,что вы можете получить постоянную ссылку на страницу по идентификатору с помощью
get_page_link()
:Мне любопытно,есть ли способ сделать то же самое со слагом страницы - например: