Qual é a diferença entre home_url () e site_url ()

65

Meu entendimento é que site_url()retorna o local onde estão os arquivos principais do wordpress.

Então, se meu blog estiver hospedado em http://example.com/blog, site_url()retornaráhttp://example.com/blog

Mas então como é que home_url()difere? Para mim, home_url()retorna a mesma coisa:http://example.com/blog

Se estiver correto, posso obter o wordpress para retornar http://example.com/?

Praveen
fonte
4
Você está fazendo duas perguntas ao mesmo tempo em uma pergunta muito importante. A resposta para "Qual é a diferença entre home_url () e site_url ()?" é diferente da pergunta: "Como obtenho o WordPress para retornar a raiz da URL sem o subdiretório em que está instalado?"
Volomike

Respostas:

51

Você está fazendo duas perguntas ao mesmo tempo:

  1. Qual é a diferença entre home_url()e site_url()?
  2. Como faço para o WordPress retornar a raiz do URL sem o subdiretório em que está instalado?

Aqui estão as respostas, e eu confirmei com Andrew Nacin, desenvolvedor principal do WordPress, além de executar alguns testes de servidor para confirmar o que Andrew me disse.

Questão 1

Em Geral> Configurações de wp-admin, home_url()faça referência ao campo "Endereço do site (URL)". Confuso, não é? Sim, diz "Endereço do site", então você pode assumir site_url(), mas está errado . Execute seu próprio teste e você verá. (Você pode soltar temporariamente um echo H1campo com site_url()e home_url()valores na parte superior das funções do seu tema.php.)

Enquanto isso, site_url()faça referência ao campo "Endereço do WordPress (URL)" em Geral> Configurações.

Portanto, se você deseja fazer referência a um caminho físico, como chamar o caminho da pasta de um plug-in no URL para carregar uma imagem ou chamar o caminho da pasta de um tema para carregar uma imagem, você deve realmente usar outras funções para isso - olhe plugins_url()e get_template_directory_uri().

O site_url()sempre será o local onde você pode chegar ao local por aderência em /wp-adminna extremidade, enquanto que home_url()não seria confiável este local.

O home_url()estaria onde você configurou sua página inicial, definindo Geral> Configurações "Site Endereço (URL)" campo.

Questão 2

Portanto, se eu coloquei meu blog http://example.com/bloge example.comé apenas um site estático em que tenho um tema de portfólio, esse seria um cenário alinhado à sua pergunta. Nesse caso, eu usaria este trecho de código:

<?php
function getDomain() {
    $sURL    = site_url(); // WordPress function
    $asParts = parse_url( $sURL ); // PHP function

    if ( ! $asParts )
      wp_die( 'ERROR: Path corrupt for parsing.' ); // replace this with a better error result

    $sScheme = $asParts['scheme'];
    $nPort   = $asParts['port'];
    $sHost   = $asParts['host'];
    $nPort   = 80 == $nPort ? '' : $nPort;
    $nPort   = 'https' == $sScheme AND 443 == $nPort ? '' : $nPort;
    $sPort   = ! empty( $sPort ) ? ":$nPort" : '';
    $sReturn = $sScheme . '://' . $sHost . $sPort;

    return $sReturn;
}
Volomike
fonte
Você tem um link para a discussão com A.Nacin?
kaiser
11
Foi por e-mail. Desculpa. Ah, e obrigado pela edição - lembrarei que a sintaxe será alterada na próxima vez.
Volomike
8
Levei muito tempo e muita dor para perceber que 'Site Address (URL)' = 'home' e 'WordPress Address (URL)' = 'siteurl'. Eles definitivamente deveriam mudar esses rótulos.
Jbm
Sua resposta para a segunda pergunta chega ao jackpot!
21418 Devner #
7

Se você deseja que o WP seja instalado em um diretório, mas no site da raiz do domínio, é necessário mover o arquivo index.php principal para a raiz do domínio e editar a instrução require para apontar para o diretório.

Esse processo é descrito aqui: Dando ao WordPress seu próprio diretório .

Milo
fonte
Eu sempre uso apenas home_url()porque estou no modo de rede wp. Eu só dei ao WordPress seu próprio diretório uma vez e simplesmente não era do meu agrado. Mas eu uso no entanto wp_content_direm alguns sites.
xLRDxREVENGEx 17/06
Eu não tenho nenhuma experiência com vários sites, por isso não estou familiarizado com como essas coisas funcionam nessa situação. Prefiro instalar o WP em um diretório apenas para manter as coisas limpas e não bagunçar a raiz.
Milo
minha estrutura de arquivos é provavelmente uma das mais legais. home/usr/public_html/site1 home/usr/public_html/site2e assim por diante e, em seguida, o wp_content_dirgeralmente é em um CDN
xLRDxREVENGEx
se uma instalação do WP fosse a única coisa lá, tudo bem, mas estou trabalhando principalmente em servidores de outras pessoas com centenas de arquivos e diretórios espalhados.
Milo
Meu entendimento está correto de que site_url () e home_url () são iguais, a menos que alguém configure seu diretório de instalação do wordpress para ser diferente da raiz?
Praveen
3

TLDR:

Em uma instalação não padrão, você pode colocar seus arquivos do WordPress em um subdiretório da raiz do site.
... e ainda permita que seus visitantes acessem seu "site" do WordPress a partir do URL do domínio (raiz) do seu site, sem anexar o nome do subdiretório:
(por exemplo: www.example.comvs www.example.com/wordpress):

WP function  | wp_options. | WP constant  | what it represents       | WP Settings Label | Example     
-------------------------------------------------------------------------------------------------------------------------------------
`site_url()` | `siteurl`   | `WP_SITEURL` | WordPress files location | WordPress Address | https://www.example.com/wordpress
`home_url()` | `home`      | `WP_HOME`    | browser address bar      | Site Address      | https://www.example.com 

Onde o valor para uma constante WP tem precedência sobre um valor wp_options / WP Settings.

Configurações diferentes para WordPress

Nas instalações mais padrão do WordPress, home_urle site_urlterá o mesmo valor.
Independentemente disso, eles representam duas coisas diferentes.

Em uma instalação não padrão , eles podem ter valores diferentes.

NOTA: Estou deixando de lado o protocolo na minha resposta para facilitar a legibilidade.
Neste post, ANTEPOR CADA URL com: https://, http://OR //
(a menos que eu incluí-lo já).

( //é o relativeprotocolo e funcionará para ambos / http://ou https://)

Instalações padrão (incluindo instalações com "um clique")

home_url: é a página inicial do site (wordpress), conforme indicado na barra de endereços do usuário.
site_url: é o diretório em que seus arquivos wordpress estão localizados.

A instalação de 5 minutos do WordPress instala arquivos wordpress, esses dois valores serão os mesmos - os arquivos wordpress serão instalados na mesma pasta que você deseja que as pessoas usem para acessar seu site ou na parte wordpress (blog) do site do servidor.

Exemplo 1:
usuário acessa o seu blog em: www.example.com,
arquivos wordpress instalados em: www.example.comou a pasta raiz do site do seu servidor.

home_url=== site_url==="www.example.com"

Exemplo 2:
usuário acessa o seu blog em: www.example.com/blog,
arquivos WordPress instalado em: www.example.com/blogou na blogpasta dentro da raiz do seu site.

home_url=== site_url==="www.example.com/blog"

Nesse caso, www.example.comé o site principal e www.example.com/blogé a raiz do seu blog.
Aqui o seu blog é separado e funciona como subconjunto do seu site principal.
Nesse caso, seu site principal não é controlado, definido ou estilizado pelo WordPress.
Apenas o seu blog é. Todos os URLs do seu blog serão processados ​​porwww.example.com/blog

Nota: Na documentação, "site / site do Wordpress" (em vez de simplesmente "site / site") refere-se ao diretório em que os arquivos do WordPress estão instalados. Neste caso, é www.example.com/blog- tudo dentro da blogpasta. O "site WordPress", nesse cenário, não é o mesmo que seu domínio, sua raiz ou seu site principal. É um subconjunto do seu site em geral. Como um site dentro de um site. Menciono isso, pois a terminologia pode parecer pouco clara ou confusa, dada essa configuração específica.

Configuração alternativa de instalação do WordPress

Dando WordPress seu próprio diretório , a seção Method II (With URL change).

Por exemplo, muitas pessoas não querem entupir a pasta raiz do site com todos os arquivos wordpress.
Eles querem instalar o wordpress em um subdiretório, * mas têm o "blog" ou o "site WordPress" acessado como se os arquivos estivessem instalados na raiz da raiz do servidor do site.

Isso é particularmente verdadeiro quando o WordPress é usado para criar e executar um site inteiro que nem sequer possui um "blog".

Exemplo 3:
usuário acessa seu "blog" em: www.example.com,
arquivos wordpress instalados em: www.example.com/wordpressou a pasta raiz do site do seu servidor.

home_url=== "www.example.com"
site_url==="www.example.com/wordpress"

(Nota: essa configuração não funcionará "pronta para uso" apenas alterando os valores dessas variáveis. Requer alterações adicionais na configuração para funcionar corretamente.
Consulte Consulte Dando ao WordPress seu próprio diretório , a seção intitulada Method II (With URL change)como fazer isso.

No presente caso home_urle site_urldeve conter valores diferentes.

Nesta configuração, você deseja que seu site funcione exatamente como se os arquivos do WordPress estivessem instalados no diretório raiz do servidor ...
MAS, para fins organizacionais no servidor,
você realmente tem seus arquivos do WordPress em uma pasta chamada wordpressna pasta do servidor. diretório raiz do seu site.

Então, o usuário digitará www.example.compara obter sua página inicial do WordPress, em vez dewww.example.com/wordpress

função wordpress <--> variável de banco de dados <--> Wordpress Constant

Esta seção assume a configuração do exemplo 3 acima.
URL da barra de endereço: www.example.com
arquivos wordpress: diretório / wordpress

(Os outros casos são triviais: todas as variáveis ​​/ funções mantêm / retornam o mesmo valor.)

Como definir os valores para site_urlehome_url

Primeiro, deixe-me notar que siteurle homearmazenar valores devolvidos pelas funções acima

1) Normalmente, você define esses valores no painel de backend / painel / administrador do
Settings -> General ->
siteurl WordPress: Endereço do WordPress: https://www.example.com/wordpress
home Endereço do site: https://www.example.com

(não inclua barras finais aqui - isso seria configurado em outro lugar)

2) Como alternativa, você define esses valores no banco de dados do WordPress:
wp_optionstabela ->

`options_name` | `options_value`
----------------------------------------------------
`siteurl`      | `https://www.example.com/wordpress`  
`home`         | `https://www.example.com`  

(não inclua barras finais aqui - isso seria configurado em outro lugar)

3) Edite suas wp-config.php
Define essas constantes específicas para manter seus valores
Defina WP_HOMEe WP_SITEURLconfigurações inserindo estas linhas na parte superior do seu wp-config.phparquivo:

define('WP_SITEURL','http://example.com/wordpress');  // wordpress core files
define('WP_HOME','http://example.com');               // address bar url

// ** MySQL settings - You can get this info from your web host ** //
...    

(não inclua barras finais aqui - isso seria configurado em outro lugar)

Referência: WP_SITEURL e WP_HOME

NOTA: Isso é confuso
(eu realmente gostaria que o WordPress tivesse rotulado as configurações de maneira semelhante aos nomes php,
como Wordpress Site Addresse Home Page Addressou algo mais explícito como location of WordPress Site core filese browser url to access WordPress home page)

`WP_SITEURL` <--> `site_url()` <--> `siteurl` <--> Wordpress Address <--> /wordpress   
`WP_HOME`    <--> `home_url()` <--> `home`    <--> Site Address      <--> /

Agora aqui é onde fica complicado!

Se você definiu essas constantes no seuwp-config.phparquivo, não importa quais valores você tem na sua página de banco de dados / configurações.
De fato, você não poderá modificar esse valor até o final (ele ficará acinzentado). Você ainda pode modificar modificando seu banco de dados, mas isso não terá efeito no site, enquanto as constantes existirem no arquivo wp-config.

Seu arquivo de configuração não alterará os valores no seu banco de dados (ou, portanto, na sua página de configurações). Em vez disso, os valores da página de banco de dados / configurações serão ignorados . Os valores no wp-config substituem ou têm precedência sobre a configuração do banco de dados.

Então ... para finalizar (TLDR):

WP function  | wp_options. | WP constant  | what it represents       | WP Settings Label | Example     
-------------------------------------------------------------------------------------------------------------------------------------
`site_url()` | `siteurl`   | `WP_SITEURL` | WordPress files location | WordPress Address | https://www.example.com/wordpress
`home_url()` | `home`      | `WP_HOME`    | browser address bar      | Site Address      | https://www.example.com 

Onde o valor para uma constante WP tem precedência sobre um valor wp_options / WP Settings.

O valor do registro wp_options e o valor WP Settings são os mesmos.
Editar um, por definição, edita o outro.
São apenas duas maneiras diferentes de acessar a mesma variável.

Por outro lado, as constantes do WordPress são únicas e independentes.
Internamente, as constantes do WordPress (PHP) substituem seus equivalentes de banco de dados.
Se uma constante é definida no wp-config, ela não altera o banco de dados.
Mas internamente o WordPress sempre prefere / usa seu valor em vez do db.

SherylHohman
fonte
3

As funções site_url()e home_url()são semelhantes e podem causar confusão na maneira como elas funcionam.

A site_url()função recupera o valor do valor siteurlna wp_optionstabela em seu banco de dados.

Este é o URL para os arquivos principais do WordPress.
Se seus arquivos principais existirem em um subdiretório /wordpressno servidor da web, o valor seria http://example.com/wordpress.

A home_url()função recupera o valor para homena wp_optionstabela em seu banco de dados.

Este é o endereço que você deseja que as pessoas visitem para visualizar seu site WordPress.

Se os arquivos principais do WordPress existirem /wordpress, mas você deseja que o URL do site seja http://example.como valor inicial http://example.com.

Nanhe Kumar
fonte
2

Para responder sua segunda pergunta:

P: Se isso estiver correto, posso obter o wordpress para retornar http://example.com/ ?

Você não pode, a menos que siga as etapas do diretório Dando ao WordPress . Usando isso, você coloca os arquivos principais do WordPress em /blogou, /WordPresse depois index.phpem sua raiz.

Se você decidir colocar o WordPress em seu próprio diretório, use-o home_url()para obter index.phpe site_url()obter arquivos principais e tal.

Refrences:
Codex para site_url
Codex para home_url
Codex para dar o próprio diretório do Wordpress

xLRDxREVENGEx
fonte
-1

A maneira mais fácil de obter o URL do site sem subdiretórios ( http://example.com/ em vez de http://example.com/blog ), basta usar a barra invertida /

Por exemplo, se você digitar:

<a href="/">domain url</a>

Ele criará um link que vai para o seu domínio

Jake
fonte
Obrigado por participar. Infelizmente, isso não responde à pergunta feita pelo OP. Existem muitas razões pelas quais uma pessoa precisa usar as funções do wordpress sobre as quais o OP pergunta. É improvável que o OP simplesmente queira adicionar um link à sua home page via html, como editar uma postagem. É mais provável que o OP esteja editando um arquivo de tema php ou um arquivo de plug-in. De qualquer forma, eles estão trabalhando com php, não com html. Finalmente, embora OP esperado um valor sem /para este local, em um local diferente, OP pode esperar um subdiretório a ser devolvido. Depende da configuração do WP para cada site.
SherylHohman 5/01