- How to get URL of current page displayed?
- 14 Answers 14
- get_permalink() │ WP 1.0.0
- Возвращает
- Использование
- Примеры
- #1 Получим ссылку на текущую запись
- #2 Получаем ссылки на определенные посты
- #3 Использование со вторым параметром
- Список изменений
- Код get_permalink() get permalink WP 6.2.2
- Cвязанные функции
- permalink (постоянные ссылки ЧПУ)
- Записи: посты, страницы, .
- Ссылки (УРЛы)
- get_page_link() — возвращает ссылку на страницу (тип поста page, но работает и для записей тоже).
- Примеры
- get_page_link() │ WP 1.5.0
- Возвращает
- Использование
- Примеры
- #1 Демонстрация работы
- Get current page URL and title in WordPress?
- 3 Answers 3
How to get URL of current page displayed?
I want to add custom PHP code to ensure that whenever a page on my site loads in my browser, the URL of that page is echoed to the screen. I can use echo get_permalink() , but that does not work on all pages. Some pages (e.g. my homepage) display several posts, and if I use get_permalink() on these pages, the URL of the displayed page is not returned (I believe it returns the URL of the last post in the loop). For these pages, how can I return the URL? Can I attach get_permalink() to a particular hook that fires before the loop is executed? Or can I somehow break out of the loop, or reset it once it is complete? Thanks.
Can you provide some context as to what you would want to do with this URL? Are you trying to create sharable URLs? Assemble custom URLs for links/actions?
@TomJNowell I would like to enqueue a particular JS script, but only on certain pages (in this case, those pages are the homepage of my site in various languages: example.com, example.com/fr, example.com/es, etc). The JS file will server to add hyperlinks to several titles that appear only on the homepage.
@TomJNowell Well now my code is if ( home_url( $wp->request ) == home_url() ) < wp_enqueue_script();>This appears to fire on every home page, regardless of language. Is that what you were suggesting?
Why not use $_SERVER[‘REQUEST_URI’] and company? See this question: stackoverflow.com/q/6768793/247696
14 Answers 14
get_permalink() is only really useful for single pages and posts, and only works inside the loop.
The simplest way I’ve seen is this:
global $wp; echo home_url( $wp->request )
$wp->request includes the path part of the URL, eg. /path/to/page and home_url() outputs the URL in Settings > General, but you can append a path to it, so we’re appending the request path to the home URL in this code.
Note that this probably won’t work with Permalinks set to Plain, and will leave off query strings (the ?foo=bar part of the URL).
To get the URL when permalinks are set to plain you can use $wp->query_vars instead, by passing it to add_query_arg() :
global $wp; echo add_query_arg( $wp->query_vars, home_url() );
And you could combine these two methods to get the current URL, including the query string, regardless of permalink settings:
global $wp; echo add_query_arg( $wp->query_vars, home_url( $wp->request ) );
get_permalink() │ WP 1.0.0
Получает постоянную ссылку на запись, для дальнейшего использования в php. Может быть использована за пределами Цикла WordPress, для этого нужно указывать первый параметр — ID поста, ссылку на который нужно получить. Получает URL для любого типа записи: post , page и произвольный тип записи.
Заметка: Если не указать параметр ID и использовать эту функция за пределами Цикла WordPress на страницах архивов (категории, архив по дате, архив по авторам и т.д.), функция вернет ссылку на последнюю статью выводимую в Цикле текущей страницы, а не ссылку на текущую страницу.
Хуки из функции
Возвращает
Использование
$url = get_permalink( $post, $leavename );
$post(число/объект) ID или объект записи (поста), ссылку на который нужно получить.
По умолчанию: 0 (ID текущего поста) $leavename(логический) Не заменять имя поста в ссылке, т.е. не заменять тег %postname% на имя поста.
По умолчанию: false
Примеры
#1 Получим ссылку на текущую запись
Получить ссылку на пост (внутри Цикла WordPress). Так как функция не выводит данные, то нужно использовать php команду echo :
Постоянная ссылка на пост:
#2 Получаем ссылки на определенные посты
#3 Использование со вторым параметром
Оставляем тег %postname% неизменным, например у нас в ЧПУ стоит структура %post_id%/%postname% , тогда функция сработает так:
// выведет: http://example.com/185/%postname%
Список изменений
Код get_permalink() get permalink WP 6.2.2
function get_permalink( $post = 0, $leavename = false ) < $rewritecode = array( '%year%', '%monthnum%', '%day%', '%hour%', '%minute%', '%second%', $leavename ? '' : '%postname%', '%post_id%', '%category%', '%author%', $leavename ? '' : '%pagename%', ); if ( is_object( $post ) && isset( $post->filter ) && 'sample' === $post->filter ) < $sample = true; >else < $post = get_post( $post ); $sample = false; >if ( empty( $post->ID ) ) < return false; >if ( 'page' === $post->post_type ) < return get_page_link( $post, $leavename, $sample ); >elseif ( 'attachment' === $post->post_type ) < return get_attachment_link( $post, $leavename ); >elseif ( in_array( $post->post_type, get_post_types( array( '_builtin' => false ) ), true ) ) < return get_post_permalink( $post, $leavename, $sample ); >$permalink = get_option( 'permalink_structure' ); /** * Filters the permalink structure for a post before token replacement occurs. * * Only applies to posts with post_type of 'post'. * * @since 3.0.0 * * @param string $permalink The site's permalink structure. * @param WP_Post $post The post in question. * @param bool $leavename Whether to keep the post name. */ $permalink = apply_filters( 'pre_post_link', $permalink, $post, $leavename ); if ( $permalink && ! wp_force_plain_post_permalink( $post ) ) < $category = ''; if ( strpos( $permalink, '%category%' ) !== false ) < $cats = get_the_category( $post->ID ); if ( $cats ) < $cats = wp_list_sort( $cats, array( 'term_id' =>'ASC', ) ); /** * Filters the category that gets used in the %category% permalink token. * * @since 3.5.0 * * @param WP_Term $cat The category to use in the permalink. * @param array $cats Array of all categories (WP_Term objects) associated with the post. * @param WP_Post $post The post in question. */ $category_object = apply_filters( 'post_link_category', $cats[0], $cats, $post ); $category_object = get_term( $category_object, 'category' ); $category = $category_object->slug; if ( $category_object->parent ) < $category = get_category_parents( $category_object->parent, false, '/', true ) . $category; > > // Show default category in permalinks, // without having to assign it explicitly. if ( empty( $category ) ) < $default_category = get_term( get_option( 'default_category' ), 'category' ); if ( $default_category && ! is_wp_error( $default_category ) ) < $category = $default_category->slug; > > > $author = ''; if ( strpos( $permalink, '%author%' ) !== false ) < $authordata = get_userdata( $post->post_author ); $author = $authordata->user_nicename; > // This is not an API call because the permalink is based on the stored post_date value, // which should be parsed as local time regardless of the default PHP timezone. $date = explode( ' ', str_replace( array( '-', ':' ), ' ', $post->post_date ) ); $rewritereplace = array( $date[0], $date[1], $date[2], $date[3], $date[4], $date[5], $post->post_name, $post->ID, $category, $author, $post->post_name, ); $permalink = home_url( str_replace( $rewritecode, $rewritereplace, $permalink ) ); $permalink = user_trailingslashit( $permalink, 'single' ); > else < // If they're not using the fancy permalink option. $permalink = home_url( '?p=' . $post->ID ); > /** * Filters the permalink for a post. * * Only applies to posts with post_type of 'post'. * * @since 1.5.0 * * @param string $permalink The post's permalink. * @param WP_Post $post The post in question. * @param bool $leavename Whether to keep the post name. */ return apply_filters( 'post_link', $permalink, $post, $leavename ); >
Cвязанные функции
permalink (постоянные ссылки ЧПУ)
Записи: посты, страницы, .
- edit_post_link()
- get_delete_post_link()
- get_edit_post_link()
- get_post_field()
- get_post_status()
- get_post_time()
- get_the_content()
- get_the_date()
- get_the_excerpt()
- get_the_ID()
- get_the_modified_date()
- get_the_modified_time()
- get_the_time()
- get_the_title()
- get_the_title_rss()
- has_excerpt()
- post_password_required()
- register_post_status()
- single_post_title()
- the_author()
- the_content()
- the_date()
- the_excerpt()
- the_excerpt_rss()
- the_ID()
- the_modified_date()
- the_time()
- the_title()
- the_title_attribute()
Ссылки (УРЛы)
- admin_url()
- edit_tag_link()
- get_admin_url()
- get_home_url()
- get_privacy_policy_url()
- get_search_query()
- get_site_url()
- get_theme_file_uri()
- home_url()
- site_url()
- the_privacy_policy_link()
get_page_link() — возвращает ссылку на страницу (тип поста page, но работает и для записей тоже).
Функция возвращает абсолютный URL текущей страницы (если используется в цикле) или же страницы с указанным в параметрах ID. Все параметры необязательные. Все параметры по умолчанию имеют значение false .
Если же страница установлена на морду сайта, тогда результатом действия функции будет значение home_url(‘/’).
get_page_link( $post = false, $leavename = false, $sample = false )
$post (целое число|объект) ID или объект страницы, по умолчанию — текущая страница из цикла. $leavename (логическое) если установлено true , то вместо урла будет возвращать структуру постоянных ссылок для страниц. $sample (логическое) для этого параметра есть несколько случаев:
- Если страница не является черновиком и не находится на модерации (статусы draft , pending , auto-draft ), тогда вне зависимости от параметра $sample, будет выводиться ссылка на страницу как обычно;
- Если же страница имеет один из перечисленных статусов (ну т.е. она не опубликована), тогда по умолчанию ее URL будет вида: https://misha.agency/?page_id=2 (в этом случае параметр $leavename кстати будет игнорироваться), однако если параметр $sample установить равным true , тогда в URL будет учитываться структура постоянных ссылок, например: https://misha.agency/sample-page .
Примеры
Предположим, у нас есть какая-то страница с и ярлыком sample-page.
echo get_page_link( 2 ); // https://misha.agency/sample-page
echo get_page_link( 2, true ); // https://misha.agency/%pagename%
get_page_link() │ WP 1.5.0
Вместо этой функции почти всегда лучше использовать get_permalink() — универсальная функция, которая использует эту функцию когда нужно.
Хуки из функции
Возвращает
Использование
get_page_link( $post, $leavename, $sample );
$post(число|WP_Post) ID страницы или её объект.
По умолчанию: global $post $leavename(true|false) Нужно ли оставить холдер %pagename% как есть. true — оставить холдер без замены его на имя страницы. Имя страницы собирается из имени текущей страницы и родительских, например, parent_page_name/current_page_name .
По умолчанию: false $sample(true|false) true — получить образец ссылки с учетом структуры ЧПУ. Это может быть нужно, когда ссылка форсированно возвращается в простом виде (не ЧПУ — /?pagename=contacts ), а нам нужно получить именно ЧПУ ( /contacts ).
По умолчанию: false
Примеры
#1 Демонстрация работы
// тип записи page — для которого предназначена эта функция echo get_page_link( 10124 ); // https://wp-kama.ru/about/privacy-policy // оставим холдер echo get_page_link( 10124, true ); // https://wp-kama.ru/%pagename%
ВНИМАНИЕ: для типа записи post и других произвольных типов записей функция не предназначена, поэтому она может вернуть неправильный результат.
echo get_page_link( 13564 ); // https://wp-kama.ru/atributy-scrset-sizes // правильная ссылка будет такая echo get_permalink( 13564 ); // https://wp-kama.ru/id_13564/atributy-scrset-sizes.html
Get current page URL and title in WordPress?
-1 for an unclear and vague question, please try to provide as much information as you can to describe your problem.
If you get no responses, there probably was a reason for it. You should edit your question to make it more clear to generate responses and not post new ones. If your problem is related to WordPress, you should state so.
3 Answers 3
Here are few super global variables for getting url info:
$_SERVER['PHP_SELF']; $_SERVER['REQUEST_URI']; $_SERVER['SCRIPT_NAME']
$_SERVER[‘SCRIPT_NAME’]
$_SERVER[‘SCRIPT_NAME’] will be same — /index.php . It is irrespective of the actual URI ( $_SERVER[‘REQUEST_URI’] ) used to access the site.
As it returns the actual script name, it fails provide additional path information that may be present. So if the $_SERVER[‘REQUEST_URI’] is /index.php/big/directory/ then too the $_SERVER[‘SCRIPT_NAME’] will be same — /index.php .
$_SERVER[‘SCRIPT_NAME’] is supported on all platforms
$_SERVER[‘PHP_SELF’]
This is the filename of the currently executing script, relative to the document root. However, unlike $_SERVER[‘SCRIPT_NAME’] , it provides additional path information like $_SERVER[‘REQUEST_URI’] when the actual php file is present in the path. So when the $_SERVER[‘REQUEST_URI’] is /index.php/big/directory/ then $_SERVER[‘PHP_SELF’] will be /index.php/big/directory/ .
However if all the URI’s under http://www.example.com/ is mapped to http://www.example.com/index.php , then, for example, http://www.example.com/abc/def will return /index.php like $_SERVER[‘SCRIPT_NAME’] . Note that $_SERVER[‘REQUEST_URI’] data is ignored for this request.
$_SERVER[‘REQUEST_URI’]
It will give you entire url including query string vars.
Title of the page:
There is no built-in functionality to get title of the page, however, you can use the HTML Simple DOM to read the contents of
Now, you can use $title however, you like. Visit the their site for more info about it.