Как получить URL-адрес текущей страницы?
-
-
Не могли бы вы рассказать о том,что вы хотите делать с этим URL-адресом?Вы пытаетесь создать общие URL-адреса?Собирать пользовательские URL-адреса для ссылок/действий?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?
- 0
- 2017-07-25
- Tom J Nowell
-
@TomJNowell Я хотел бы поставить в очередь конкретный сценарий JS,но только на определенных страницах (в данном случае эти страницы являются домашней страницей моего сайта на разных языках: https://www.example.com/,https://www.example.com/fr/,https://www.example.com/es/и т. д.).Файл JS будет сервером для добавления гиперссылок к нескольким заголовкам,которые появляются только на домашней странице.@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: https://www.example.com/, https://www.example.com/fr/, https://www.example.com/es/, etc). The JS file will server to add hyperlinks to several titles that appear only on the homepage.
- 0
- 2017-07-25
- cag8f
-
почему бы просто не использоватьis_home () илиis_page ('fr') и т.д. и поставить скрипт в очередь только в том случае,если это правда?why not just use `is_home()` or `is_page( 'fr' )` etc and only enqueue the script if it's true?
- 0
- 2017-07-25
- Tom J Nowell
-
@TomJNowell Ну,теперь мой код - `if (home_url ($ wp-> request)==home_url ()) {wp_enqueue_script ();}` Кажется,это срабатывает на каждой домашней странице,независимо от языка.Это то,что вы предлагали?@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?
- 0
- 2017-07-26
- cag8f
-
Почему бы не использовать `$ _SERVER ['REQUEST_URI']` и компанию?См. Этот вопрос: https://stackoverflow.com/q/6768793/247696Why not use `$_SERVER['REQUEST_URI']` and company? See this question: https://stackoverflow.com/q/6768793/247696
- 1
- 2019-05-29
- Flimm
-
10 ответ
- голосов
-
- 2017-07-25
get_permalink()
действительно полезен только для отдельных страниц и сообщений и работает только внутри цикла.Самый простой способ,который я видел:
global $wp; echo home_url( $wp->request )
$wp->request
включает часть пути URL-адреса,например./path/to/page
иhome_url()
выводят URL-адрес в разделе «Настройки»> «Общие»,но вы можете добавить к нему путь,поэтому мы добавляем путь запроса к домашний URL в этом коде.Обратите внимание,что это,вероятно,не будет работать,если для параметра Permalinks установлено значение Plain,и останутся строки запроса (часть URL-адреса
?foo=bar
).Чтобы получить URL-адрес,когда для постоянных ссылок задано обычное значение,вы можете использовать вместо него
$wp->query_vars
,передав его вadd_query_arg()
:global $wp; echo add_query_arg( $wp->query_vars, home_url() );
И вы можете объединить эти два метода,чтобы получить текущий URL,включая строку запроса,независимо от настроек постоянной ссылки:
global $wp; echo add_query_arg( $wp->query_vars, home_url( $wp->request ) );
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
andhome_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 toadd_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 ) );
-
Если для постоянных ссылок установлено значениеplain: `echo '//'.$ _SERVER ['HTTP_HOST'].$ _SERVER ['REQUEST_URI']; `.If permalinks set to plain: `echo '//' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];`.
- 7
- 2017-07-25
- Max Yudin
-
@Jacob Я пробовал это,но похоже,он возвращает только URL-адрес моей домашней страницы.Как вы можете видеть в левом верхнем углу этой страницы (https://dev.horizonhomes-samui.com/properties/hs0540/),я вставил код в `echo home_url ($ wp-> request)`.Я также позаботился о включении `global $ wp`.Постоянные ссылки не являются "обычными",а имеют значение "Имя сообщения".Я также не вижу в журнале соответствующих ошибок PHP.Эта конкретная страница является частью моего сайта разработчиков,который в противном случае закрыт для посетителей.Я не уверен,имеет это значение или нет.edit: На самом деле,придерживайтесь этой мысли - может быть ошибка пользователя.Ожидать...@Jacob I tried that, but it seems to be returning the URL of my homepage only. As you can see in the top left on this page (https://dev.horizonhomes-samui.com/properties/hs0540/), where I have inserted code to `echo home_url( $wp->request )`. I have ensured to include `global $wp` as well. Permalinks are not 'Plain,' but set to 'Post Name.' I don't see any relevant PHP errors in the log either. This particular page is part of my dev site, which is otherwise blocked off to visitors. I'm not sure if that matters or not. edit: Actually, hold that thought--could be user error. Stand by...
- 2
- 2017-07-25
- cag8f
-
@Jacobedit 2: Хорошо,ваш код действительно работает.Моя проблема заключалась в том,что я включал код вfunctions.php «naked»,то есть не в какую-либо функцию,прикрепленную к хуку.Итак,ваш код возвращал URL-адрес домашней страницы,независимо от страницы,которая отображалась в моем браузере.Как только я переместил код внутрь функции - функции,прикрепленной к перехватчику WP (wp_enqueue_scripts),он действительно вернул URL-адрес отображаемой страницы.Вы знаете причину такого поведения?Может,для этого нужно создать новый вопрос.@Jacob edit 2: OK your code does indeed work. My issue was that I was including the code in functions.php 'naked,' i.e. not in any function that is attached to a hook. So your code was returning the URL of the homepage, regardless of the page that was displayed in my browser. Once I moved the code inside a function--a function attached to a WP hook (wp_enqueue_scripts), it did indeed return the URL of the displayed page. Do you know the reason for that behavior? Maybe I need to create a new question for that.
- 1
- 2017-07-25
- cag8f
-
@ cag8f Если код находится "голым" вfunctions.php,значит,вы запускаете его до того,как были установлены все свойства объекта $ wp.Когда вы оборачиваете его функцией,прикрепленной к соответствующему хуку,вы откладываете его выполнение до подходящей точки в коде Wordpress.@cag8f If the code sits "naked" in functions.php then you are running it before all the properties of the $wp object have been set up. When you wrap it in a function attached to an appropriate hook then you are delaying its execution until a suitable point in the Wordpress code run.
- 3
- 2018-04-05
- Andy Macaulay-Brook
-
Все эти методы потрясающие и отличные идеи для работы с WordPress.Однако вы можете добавить к ним `trailingslashit ()`,в зависимости от ваших потребностей.These methods are all awesome, and great ideas for working with WordPress. You might add `trailingslashit()` to them though, depending on your needs.
- 0
- 2019-10-17
- Jake
-
- 2018-04-05
Вы можете использовать приведенный ниже код,чтобы получить весь текущий URL в WordPress:
global $wp; $current_url = home_url(add_query_arg(array(), $wp->request));
Будет показан полный путь,включая параметры запроса.
You may use the below code to get the whole current URL in WordPress:
global $wp; $current_url = home_url(add_query_arg(array(), $wp->request));
This will show the full path, including query parameters.
-
Привет,если вы посмотрите https://developer.wordpress.org/reference/functions/add_query_arg/,вы увидите,что ваш код на самом деле не сохраняет существующие параметры запроса.Hi - if you have a look at https://developer.wordpress.org/reference/functions/add_query_arg/ you'll see that your code doesn't actually preserve existing query parameters.
- 0
- 2018-04-05
- Andy Macaulay-Brook
-
Чтобы сохранить параметры запроса,вам нужно заменить пустой массив array () на $ _GET.то есть: `home_url (add_query_arg ($ _ GET,$ wp-> request));`To preserve query parameters you'd need to replace the empty `array()` with `$_GET`. ie: `home_url(add_query_arg($_GET,$wp->request));`
- 5
- 2018-06-14
- Brad Adams
-
Не будет работать,если WordPress установлен в подкаталогеIt won’t work if WordPress is installed in subdirectory
- 0
- 2018-11-26
- ManzoorWani
-
- 2019-10-21
Почему бы просто не использовать?
get_permalink(get_the_ID());
Why not just use?
get_permalink(get_the_ID());
-
+1 все остальные ответы слишком сложные,это просто самое простое решение+1 all other answers are much to complicated, this is just the simplest solution
- 2
- 2020-04-16
- Mark
-
Это самый простой способ.+1This is the easiest way. +1
- 1
- 2020-05-23
- Syafiq Freman
-
не работает с категориями блогов на моем сайтеdoesn't work with blog categories on my site
- 0
- 2020-06-21
- Iggy
-
Для страниц категорий используйте `get_category_link (get_query_var ('cat'));`For category pages, use `get_category_link( get_query_var( 'cat' ) );`
- 0
- 2020-06-23
- Dario Zadro
-
- 2018-12-28
Следующий код даст текущий URL:
global $wp; echo home_url($wp->request)
Вы можете использовать приведенный ниже код,чтобы получить полный URL вместе с параметрами запроса.
global $wp; $current_url = home_url(add_query_arg(array($_GET), $wp->request));
Будет показан полный путь,включая параметры запроса.Это сохранит параметры запроса,если они уже указаны в URL.
The following code will give the current URL:
global $wp; echo home_url($wp->request)
You can use the below code to get the full URL along with query parameters.
global $wp; $current_url = home_url(add_query_arg(array($_GET), $wp->request));
This will show the full path, including query parameters. This will preserve query parameters if already in the URL.
-
Этот фрагмент пропускает `wp-admin/plugins.php` в моем текущем URL,это только корневой путь и строки запроса.This snippet skips `wp-admin/plugins.php` in my current URL, it's only the root path and query strings.
- 0
- 2019-08-03
- Ryszard Jędraszyk
-
- 2018-11-29
function current_location() { if (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') { $protocol = 'https://'; } else { $protocol = 'http://'; } return $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; } echo current_location();
function current_location() { if (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') { $protocol = 'https://'; } else { $protocol = 'http://'; } return $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; } echo current_location();
-
Вы можете объяснить,как и почему этот код решает вопрос?Can you explain how and why this code solves the question?
- 0
- 2018-11-29
- kero
-
На мой взгляд наиболее гибкое решение.Он работает на любой странице WP (даже на wp-admin,wp-login.php,страницах архива и т. Д.).Просто обратите внимание,что он не включает никаких параметров URLIn my opinion the most flexible solution. It works on any WP page (even on wp-admin, wp-login.php, archive pages, etc). Just notice, that it does not include any URL params
- 0
- 2019-04-01
- Philipp
-
- 2018-06-11
Это улучшенный способ примера,упомянутого ранее.Он работает,когда включены красивые URL-адреса,однако он отклоняется,если есть какой-либо параметр запроса,например /page-slug/? Param=1 или URL-адрес вообще уродливый.
Следующий пример будет работать в обоих случаях.
$query_args = array(); $query = wp_parse_url( $YOUR_URL ); $permalink = get_option( 'permalink_structure' ); if ( empty( $permalink ) ) { $query_args = $query['query']; } echo home_url( add_query_arg( $query_args , $wp->request ) )
This is an improved way of example that mentioned previously. It works when pretty URLs are enabled however it discards if there is any query parameter like /page-slug/?param=1 or URL is ugly at all.
Following example will work on both cases.
$query_args = array(); $query = wp_parse_url( $YOUR_URL ); $permalink = get_option( 'permalink_structure' ); if ( empty( $permalink ) ) { $query_args = $query['query']; } echo home_url( add_query_arg( $query_args , $wp->request ) )
-
- 2019-10-01
Может быть,
wp_guess_url()
- это то,что вынужно.Доступно с версии 2.6.0.Maybe
wp_guess_url()
is what you need. Available since version 2.6.0.-
Это просто угадывает базовый URL.Во внешнем интерфейсе вы получите эффект,аналогичный `home_url ()`.This just guesses the base URL. On the frontend, you end up with a similar effect to `home_url()`.
- 0
- 2019-10-17
- Jake
-
- 2020-04-04
После стольких исследований простой задачи нам подходит сочетание всех вышеперечисленных ответов:
function get_wp_current_url(){ global $wp; if('' === get_option('permalink_structure')) return home_url(add_query_arg(array($_GET), $wp->request)); else return home_url(trailingslashit(add_query_arg(array($_GET), $wp->request))); }
В конце не должно быть пропущенной косой черты и т. д.Поскольку идентификатор вопроса о выводе текущего URL-адреса,это не заботится о безопасности и т.д.Однако хеш типа #comment в конце не может быть найден в PHP.
After so much research of a simple task, a mix of all answers above works for us:
function get_wp_current_url(){ global $wp; if('' === get_option('permalink_structure')) return home_url(add_query_arg(array($_GET), $wp->request)); else return home_url(trailingslashit(add_query_arg(array($_GET), $wp->request))); }
No missing slash at the end and so on. As the question id about output the current url, this doesnt care about security and stuff. However, hash like #comment at the end cant be found in PHP.
-
- 2020-07-15
Это то,что у меня сработало (короткое и понятное решение,которое также включает строки запроса в URL-адрес):
$current_url = add_query_arg( $_SERVER['QUERY_STRING'], '', home_url( $wp->request ) );
Выходной URL будет выглядеть,как показано ниже
http://sometesturl.test/slug1/slug2?queryParam1=testing&queryParam2=123
Решение взято из здесь
This is what worked for me (short and clean solution that includes the query strings in the URL too):
$current_url = add_query_arg( $_SERVER['QUERY_STRING'], '', home_url( $wp->request ) );
The output URL will look like below
http://sometesturl.test/slug1/slug2?queryParam1=testing&queryParam2=123
The solution was taken from here
-
- 2020-07-28
Я понимаю,что это старый вопрос,но я заметил одну вещь: никто не упоминал об использовании
get_queried_object()
.Это глобальная функция wp,которая захватывает все,что связано с текущим URL-адресом,на котором вы находитесь.Так,например,если вы находитесь на странице или в публикации,он вернет объект сообщения.Если вы находитесь в архиве,он вернет объект типа записи.
WP также имеет множество вспомогательных функций,таких как
get_post_type_archive_link
,которым вы можете присвоить поле типа сообщения объекта и вернуть его ссылку,как это былоget_post_type_archive_link(get_queried_object()->name);
Дело в том,что вам не нужно полагаться на некоторые из приведенных выше хакерских ответов,а вместо этого использовать запрашиваемый объект,чтобы всегда получать правильный URL.
Это также будет работать для установок с несколькими сайтами без дополнительной работы,поскольку,используя функции wp,вы всегда получаете правильный URL.
I realize this is an old question, however one thing I've noticed is no-one mentioned using
get_queried_object()
.It's a global wp function that grabs whatever relates to the current url you're on. So for instance if you're on a page or post, it'll return a post object. If you're on an archive it will return a post type object.
WP also has a bunch of helper functions, like
get_post_type_archive_link
that you can give the objects post type field to and get back its link like soget_post_type_archive_link(get_queried_object()->name);
The point is, you don't need to rely on some of the hackier answers above, and instead use the queried object to always get the correct url.
This will also work for multisite installs with no extra work, as by using wp's functions, you're always getting the correct url.
Я хочу добавить собственный код PHP,чтобы каждый раз,когда страница моего сайта загружается в моем браузере,URL-адрес этой страницы выводится на экран.Я могу использовать
echo get_permalink()
,но это работает не на всех страницах.На некоторых страницах (например, моя домашняя страница ) отображается несколько сообщений,и если я используюget_permalink()
на этих страницах URL-адрес отображаемой страницы не возвращается (я считаю,что он возвращает URL-адрес последнего сообщения в цикле).Как я могу вернуть URL-адрес этих страниц?Могу ли я прикрепить
get_permalink()
к конкретному хуку,который срабатывает до выполнения цикла?Или я могу как-то выйти из цикла или сбросить его,когда он будет завершен?Спасибо.