Apa perbedaan antara home_url () dan site_url ()

65

Pemahaman saya adalah bahwa site_url()mengembalikan lokasi di mana file inti wordpress berada.

Jadi, jika blog saya di-host http://example.com/blogmaka site_url()kembalihttp://example.com/blog

Tetapi bagaimana bedanya home_url()? Bagi saya, home_url()mengembalikan hal yang sama:http://example.com/blog

Jika itu benar, maka bisakah saya meminta wordpress kembali http://example.com/?

Praveen
sumber
4
Anda mengajukan dua pertanyaan sekaligus pada pertanyaan yang sangat penting. Jawaban untuk "Apa perbedaan antara home_url () dan site_url ()?" berbeda dari pertanyaan, "Bagaimana cara saya mendapatkan WordPress untuk mengembalikan root URL tanpa subdirektori di mana itu diinstal?"
Volomike

Jawaban:

51

Anda mengajukan dua pertanyaan sekaligus:

  1. Apa perbedaan antara home_url()dan site_url()?
  2. Bagaimana saya mendapatkan WordPress untuk mengembalikan root URL tanpa subdirektori di mana itu diinstal?

Inilah jawabannya, dan saya mengonfirmasi dengan Andrew Nacin, pengembang inti WordPress, serta menjalankan beberapa tes server untuk mengonfirmasi apa yang dikatakan Andrew kepada saya.

Pertanyaan 1

Secara Umum> Pengaturan wp-admin, home_url()referensi bidang yang berlabel "Alamat Situs (URL)". Membingungkan, ya? Ya, katanya "Alamat Situs" jadi Anda mungkin berasumsi site_url(), tetapi Anda akan salah . Jalankan tes Anda sendiri dan Anda akan melihat. (Anda dapat menjatuhkan sementara suatu echo H1bidang dengan site_url()dan home_url()nilai - nilai di bagian atas functions.php tema Anda.)

Sementara itu, site_url()referensi bidang yang berlabel "Alamat WordPress (URL)" di Umum> Pengaturan.

Jadi, jika Anda ingin referensi di mana jalur fisik mungkin seperti memanggil jalur folder plugin pada URL untuk memuat gambar, atau memanggil jalur folder tema untuk memuat gambar, Anda harus menggunakan fungsi lain untuk itu - lihat plugins_url()dan get_template_directory_uri().

Itu site_url()akan selalu menjadi lokasi di mana Anda dapat mencapai situs dengan menempel pada /wp-adminakhirnya, sementara home_url()itu tidak akan menjadi lokasi yang andal.

Itu home_url()akan menjadi tempat Anda mengatur beranda dengan menyetel bidang Umum> Pengaturan "Alamat Situs (URL)".

Pertanyaan # 2

Jadi, jika saya telah menempatkan blog saya http://example.com/blog, dan example.comhanya beberapa situs statis di mana saya menyukai tema portofolio, maka ini akan menjadi skenario yang sejalan dengan pertanyaan Anda. Dalam kasus seperti itu, maka saya akan menggunakan potongan kode ini:

<?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
sumber
Apakah Anda memiliki tautan ke diskusi dengan A.Nacin?
kaiser
1
Itu melalui email. Maaf. Oh, dan terima kasih untuk hasil editnya - Saya akan ingat sintaksnya berubah lain kali.
Volomike
8
Butuh waktu yang sangat lama dan banyak rasa sakit untuk menyadari bahwa 'Alamat Situs (URL)' = 'rumah' dan 'Alamat WordPress (URL)' = 'siteurl'. Mereka pasti harus mengganti label-label itu.
Jbm
Jawaban Anda untuk pertanyaan kedua menyentuh jackpot!
Devner
7

Jika Anda ingin WP diinstal di direktori tetapi situs di root domain Anda, Anda perlu memindahkan file index.php utama ke root domain Anda dan mengedit pernyataan yang diperlukan untuk menunjuk dalam direktori Anda.

Proses ini diuraikan di sini: Memberi WordPress Direktori Sendiri .

Milo
sumber
Saya selalu hanya menggunakan home_url()karena saya pada mode jaringan wp. Saya hanya memberi WordPress direktori sendiri sekali dan itu hanya tidak saya sukai. Namun saya menggunakan wp_content_dirdi beberapa situs.
xLRDxREVENGEx
Saya tidak punya pengalaman dengan multisite, jadi saya tidak terbiasa bagaimana hal ini bekerja dalam situasi itu. Saya lebih suka menginstal WP di direktori hanya untuk menjaga semuanya tetap bersih dan tidak mengacaukan root.
Milo
struktur file saya mungkin salah satu yang paling rapi di sekitar. home/usr/public_html/site1 home/usr/public_html/site2dan seterusnya dan kemudian wp_content_dirbiasanya pada cdn
xLRDxREVENGEx
jika instalasi WP adalah satu-satunya hal di sana itu akan baik-baik saja, tapi saya sebagian besar bekerja pada server orang lain dengan ratusan file dan direktori berserakan.
Milo
Apakah pemahaman saya benar bahwa site_url () dan home_url () adalah sama, kecuali jika seseorang mengatur direktori instalasi wordpress mereka menjadi berbeda dari root?
Praveen
3

TLDR:

Dalam instalasi non-standar, Anda dapat menempatkan file WordPress di subdirektori dari root situs web Anda.
... dan masih memungkinkan pengunjung Anda ke pengunjung untuk mengakses "situs web" WordPress Anda dari URL Domain (root) situs Anda, tanpa menambahkan nama subdirektori:
(yaitu: 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 

Di mana nilai konstanta WP lebih diutamakan daripada nilai wp_options / WP Settings.

Konfigurasi yang berbeda untuk WordPress

Di instalasi WordPress paling standar , home_urldan site_urlakan memiliki nilai yang sama.
Bagaimanapun, mereka mewakili dua hal yang berbeda.

Dalam instalasi non-standar , mereka mungkin memiliki nilai yang berbeda.

CATATAN: Saya meninggalkan protokol dalam jawaban saya agar lebih mudah dibaca.
Dalam posting ini, tambahkan SETIAP URL dengan: https://, http://OR //
(kecuali aku termasuk sudah).

( //adalah relativeprotokol dan akan bekerja untuk salah satu / keduanya http://atau https://)

Instalasi Standar (termasuk Instalasi "Satu-Klik")

home_url: adalah halaman beranda situs web Anda (wordpress), seperti yang ditunjukkan pada bilah alamat pengguna.
site_url: adalah direktori tempat file wordpress Anda berada.

Instalasi WordPress 5 menit menginstal file wordpress kedua nilai ini akan sama - file wordpress akan diinstal dalam folder yang sama yang Anda ingin orang-orang gunakan untuk alamat situs web Anda, atau bagian wordpress (blog) dari situs web server Anda.

Contoh 1:
user mengakses blog Anda di: www.example.com,
file wordpress dipasang di: www.example.com, atau folder root dari situs server Anda.

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

Contoh 2:
user mengakses blog Anda di: www.example.com/blog,
file wordpress dipasang di: www.example.com/blog, atau di blogfolder dalam root dari situs Anda.

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

Dalam hal ini www.example.comadalah situs web utama, dan www.example.com/blogmerupakan akar dari blog Anda.
Di sini blog Anda terpisah dari, dan berfungsi sebagai bagian dari, situs web utama Anda.
Dalam hal ini, situs web utama Anda tidak dikontrol, ditentukan, atau ditata oleh WordPress.
Hanya blog Anda. Semua url di blog Anda akan diproses olehwww.example.com/blog

Catatan: Dalam dokumentasi, "Situs / situs web Wordpress" (bukan hanya "situs / situs web") merujuk ke direktori tempat file WordPress Anda dipasang. Dalam hal ini, itu adalah www.example.com/blog- segalanya di dalam blogfolder. "Situs web WordPress", dalam skenario ini, tidak sama dengan domain Anda, root Anda, atau situs web utama Anda. Ini adalah bagian dari keseluruhan situs web Anda. Jenis seperti situs web di dalam situs web. Saya menyebutkan ini sebagai terminologi yang bisa tampak tidak jelas atau membingungkan, mengingat pengaturan khusus ini.

Konfigurasi Instalasi WordPress Alternatif

Memberikan WordPress Direktori Sendiri , bagian Method II (With URL change).

Sebagai contoh, banyak orang tidak ingin menyumbat folder root situs web mereka dengan semua file wordpress.
Mereka ingin menginstal wordpress di subdirektori, * tetapi memiliki "blog" atau "situs web WordPress" diakses seolah-olah file-file itu dipasang di root root server untuk situs web.

Ini terutama benar ketika WordPress digunakan untuk membangun dan menjalankan seluruh situs web yang bahkan tidak memiliki "blog".

Contoh 3:
user mengakses Anda "blog" di: www.example.com,
file wordpress dipasang di: www.example.com/wordpress, atau folder root dari situs server Anda.

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

(Catatan: konfigurasi ini tidak akan berfungsi "di luar kotak" hanya dengan mengubah nilai-nilai dari variabel-variabel ini. Ini memerlukan perubahan konfigurasi tambahan agar berfungsi dengan benar)
Lihat Memberikan WordPress Its Own Directory , bagian berjudul Method II (With URL change)untuk bagaimana melakukan ini.

Dalam hal ini home_urldan site_urlharus memiliki nilai yang berbeda.

Dalam pengaturan ini, Anda ingin situs web Anda berfungsi persis seperti jika file WordPress dipasang di direktori root server untuk situs web Anda ...
TAPI, untuk keperluan organisasi di server,
Anda sebenarnya memiliki file WordPress di folder yang disebut wordpressserver. direktori root untuk situs web Anda.

Jadi, pengguna akan mengetik www.example.comuntuk mendapatkan beranda WordPress Anda, bukanwww.example.com/wordpress

fungsi wordpress <--> variabel basis data <--> Wordpress Constant

Bagian ini mengasumsikan konfigurasi Contoh 3 di atas.
address bar url: www.example.com
file wordpress: / direktori wordpress

(Kasus-kasus lain sepele: Semua variabel / fungsi memegang / mengembalikan nilai yang sama.)

Cara mengatur nilai untuk site_urldanhome_url

Pertama, saya perhatikan siteurldan homesimpan nilai yang dikembalikan oleh fungsi di atas

1) Biasanya Anda menetapkan nilai-nilai ini di panel backend / dashboard / admin
Settings -> General ->
siteurl WordPress: Alamat WordPress: https://www.example.com/wordpress
home Alamat Situs: https://www.example.com

(tidak termasuk trailing slash di sini - yang akan dikonfigurasi di tempat lain)

2) Atau, Anda menetapkan nilai-nilai ini di database WordPress Anda:
wp_optionstable ->

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

(tidak termasuk trailing slash di sini - yang akan dikonfigurasi di tempat lain)

3) Edit wp-config.php
Tentukan konstanta spesifik ini untuk menahan nilai-nilai Anda
Tentukan WP_HOMEdan WP_SITEURLpengaturan dengan menyisipkan baris-baris ini ke bagian atas wp-config.phpfile Anda :

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 ** //
...    

(tidak termasuk trailing slash di sini - yang akan dikonfigurasi di tempat lain)

Referensi: WP_SITEURL dan WP_HOME

CATATAN: Ini membingungkan
(saya benar-benar berharap WordPress telah melabeli Pengaturan yang mirip dengan nama php mereka,
seperti Wordpress Site Addressdan Home Page Addressatau sesuatu yang lebih eksplisit seperti location of WordPress Site core filesdan browser url to access WordPress home page)

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

Sekarang Di sinilah rumit!

JIKA Anda mendefinisikan konstanta-konstanta itu dalamwp-config.phpfileAnda, tidak masalah nilai apa yang Anda miliki di halaman database / pengaturan Anda.
Bahkan, Anda tidak akan dapat mengubah nilai ini melalui bagian belakang (itu akan diklik). Anda masih dapat memodifikasi dengan mengedit database Anda, tetapi hal itu tidak akan berpengaruh pada situs Anda, sementara konstanta ada di file wp-config Anda.

File konfigurasi Anda tidak akan mengubah nilai dalam basis data Anda (atau dengan demikian halaman pengaturan Anda). Sebaliknya, nilai halaman basis data / pengaturan Anda akan diabaikan . Nilai-nilai di wp-config timpa atau didahulukan dari pengaturan basis data Anda.

Jadi ... untuk menyelesaikan (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 

Di mana nilai konstanta WP lebih diutamakan daripada nilai wp_options / WP Settings.

Nilai catatan wp_options dan nilai Pengaturan WP adalah sama.
Mengedit satu, menurut definisi mengedit yang lain.
Ini hanya 2 cara berbeda untuk mengakses variabel yang sama.

Di sisi lain, Konstanta WordPress unik dan independen.
Secara internal, konstanta WordPress (PHP) menimpa rekan db mereka.
Jika konstanta didefinisikan dalam wp-config, itu tidak mengubah database.
Tetapi secara internal WordPress akan selalu lebih suka / menggunakan nilainya daripada db satu.

SherylHohman
sumber
3

Fungsi site_url()dan home_url()fungsinya mirip dan dapat menyebabkan kebingungan dalam cara kerjanya.

The site_url()fungsi mengambil nilai nilai siteurldalam wp_optionstabel dalam database Anda.

Ini adalah URL ke file inti WordPress.
Jika file inti Anda ada di subdirektori /wordpressdi server web Anda, nilainya akan menjadi http://example.com/wordpress.

The home_url()fungsi mengambil nilai untuk homedalam wp_optionstabel dalam database Anda.

Ini adalah alamat yang Anda ingin orang kunjungi untuk melihat situs web WordPress Anda.

Jika file inti WordPress Anda ada /wordpress, tetapi Anda ingin URL situs web Anda menjadi http://example.comnilai rumah seharusnya http://example.com.

Nanhe Kumar
sumber
2

Untuk menjawab pertanyaan kedua Anda:

T: Jika itu benar, maka bisakah saya meminta wordpress untuk mengembalikan http://example.com/ ?

Anda tidak bisa, kecuali jika Anda mengambil WordPress Memberikan langkah-langkah direktori sendiri . Menggunakan ini berarti Anda menempatkan file inti WordPress ke /blogatau /WordPressdan kemudian index.phpke akar Anda.

Jika Anda memutuskan untuk meletakkan WordPress di dalam direktori sendiri maka Anda akan menggunakan home_url()untuk pergi ke index.phpdan site_url()untuk mendapatkan file inti dan semacamnya.

Refrences:
Codex untuk site_url
Codex untuk home_url
Codex untuk Memberikan Direktori Wordpress Sendiri

xLRDxREVENGEx
sumber
-1

Cara termudah untuk mendapatkan url situs tanpa sub-direktori ( http://example.com/ daripada http://example.com/blog ), cukup gunakan backslash /

Misalnya, jika Anda mengetik:

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

Ini akan membuat tautan yang menuju ke domain Anda

jake
sumber
Terima kasih telah berpartisipasi. Sayangnya, ini tidak menjawab pertanyaan yang diajukan oleh OP. Ada banyak alasan mengapa seseorang perlu menggunakan fungsi wordpress yang ditanyakan OP. OP tidak mungkin hanya ingin menambahkan tautan ke beranda mereka melalui html, seperti dengan mengedit posting. Kemungkinan besar, OP sedang mengedit file tema php, atau file plugin. Bagaimanapun, mereka bekerja dengan php, bukan html. Akhirnya, sementara OP diharapkan nilai tanpa /untuk ini situs, di situs yang berbeda, OP mungkin mengharapkan subdirektori untuk dikembalikan. Itu tergantung pada konfigurasi WP untuk setiap situs.
SherylHohman