ความแตกต่างระหว่าง home_url () และ site_url () คืออะไร


65

ความเข้าใจของฉันคือการsite_url()คืนตำแหน่งที่เป็นไฟล์หลักของ wordpress

ดังนั้นหากบล็อกของฉันถูกโฮสต์ในเวลาhttp://example.com/blogนั้นsite_url()จะส่งคืนhttp://example.com/blog

แต่แล้วhome_url()แตกต่างกันอย่างไร สำหรับฉันhome_url()ส่งคืนสิ่งเดียวกัน:http://example.com/blog

หากถูกต้องฉันจะขอให้ wordpress กลับมาได้http://example.com/ไหม


4
คุณกำลังถามคำถามสองข้อพร้อมกันในคำถามที่สำคัญมาก คำตอบของ "ความแตกต่างระหว่าง home_url () และ site_url () คืออะไร" แตกต่างจากคำถามที่ว่า "ฉันจะให้ WordPress คืนค่ารูท URL โดยไม่ต้องมีไดเรกทอรีย่อยที่ติดตั้งได้อย่างไร"
Volomike

อ่านคู่มือตัวแปลงสัญญาณเหล่านี้: codex.wordpress.org/… ; codex.wordpress.org/… ; codex.wordpress.org/…
ธารา

คำตอบ:


51

คุณกำลังถามคำถามสองข้อในครั้งเดียว:

  1. ความแตกต่างระหว่างhome_url()และsite_url()คืออะไร
  2. ฉันจะให้ WordPress ส่งคืนรูท URL โดยไม่มีไดเรกทอรีย่อยที่ติดตั้งได้อย่างไร

นี่คือคำตอบและฉันยืนยันกับ Andrew Nacin ผู้พัฒนาหลักของ WordPress รวมถึงทดสอบเซิร์ฟเวอร์เพื่อยืนยันสิ่งที่ Andrew บอก

คำถามที่ 1

ในทั่วไป> การตั้งค่าของ wp-admin home_url()อ้างอิงฟิลด์ที่ระบุว่า "ที่อยู่ไซต์ (URL)" งั้นเหรอ? ใช่มันพูดว่า "ที่อยู่เว็บไซต์" ดังนั้นคุณอาจคิดsite_url()แต่คุณจะไม่ถูกต้อง ทำการทดสอบของคุณเองแล้วคุณจะเห็น (คุณสามารถวางecho H1เขตข้อมูลด้วยsite_url()และhome_url()ค่าที่ด้านบนของฟังก์ชั่นของธีมของคุณได้ชั่วคราว)

ในขณะเดียวกันsite_url()อ้างอิงฟิลด์ชื่อ "ที่อยู่ WordPress (URL)" ในทั่วไป> การตั้งค่า

ดังนั้นหากคุณต้องการอ้างอิงว่าอาจมีเส้นทางกายภาพเช่นการเรียกเส้นทางโฟลเดอร์ของปลั๊กอินบน URL เพื่อโหลดรูปภาพหรือเรียกเส้นทางโฟลเดอร์ของชุดรูปแบบเพื่อโหลดรูปภาพคุณควรใช้ฟังก์ชันอื่นสำหรับสิ่งนั้น - ดูและplugins_url()get_template_directory_uri()

site_url()จะเป็นสถานที่ที่คุณสามารถเข้าถึงเว็บไซต์โดยการตรึงบน/wp-adminที่สิ้นสุดในขณะที่home_url()จะไม่น่าเชื่อถือเป็นสถานที่แห่งนี้

home_url()จะเป็นที่ที่คุณได้ตั้งค่าหน้าแรกของคุณโดยการตั้งค่าทั่วไป> การตั้งค่า "ที่อยู่เว็บไซต์ (URL) ฟิลด์"

คำถาม # 2

ดังนั้นถ้าฉันได้วางบล็อกของฉันhttp://example.com/blogและexample.comเป็นเพียงเว็บไซต์คงที่ที่ฉันมีรูปแบบผลงานแล้วนี่จะเป็นสถานการณ์ที่สอดคล้องกับคำถามของคุณ ในกรณีเช่นนี้ฉันจะใช้โค้ดขนาดสั้นนี้:

<?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;
}

คุณมีลิงค์ไปยังการสนทนากับ A.Nacin หรือไม่?
ไกเซอร์

1
มันเป็นทางอีเมล ขอโทษ โอ้และขอขอบคุณสำหรับการแก้ไข - ฉันจะจำได้ว่าการเปลี่ยนแปลงทางไวยากรณ์ครั้งต่อไป
Volomike

8
ฉันใช้เวลานานและเจ็บปวดอย่างมากที่จะตระหนักว่า 'ที่อยู่ไซต์ (URL)' = 'บ้าน' และ 'ที่อยู่ WordPress (URL)' = 'siteurl' พวกเขาควรเปลี่ยนฉลากเหล่านั้นอย่างแน่นอน
Jbm

คำตอบของคุณสำหรับคำถามที่สองคือแจ็คพอต!
Devner

7

หากคุณต้องการให้ WP ติดตั้งในไดเรกทอรี แต่เป็นที่ตั้งของไซต์บนรูทโดเมนของคุณคุณจะต้องย้ายไฟล์ index.php หลักไปยังรูทโดเมนของคุณและแก้ไขข้อความต้องการให้ชี้ภายในไดเรกทอรีของคุณ

กระบวนการนี้จะระบุไว้ที่นี่: ให้ WordPress ไดเรกทอรีของตัวเอง


ฉันมักจะใช้home_url()ตั้งแต่ฉันอยู่ในโหมดเครือข่าย wp ฉันได้ให้ WordPress เป็นไดเรกทอรีของตัวเองเพียงครั้งเดียวและมันก็ไม่ใช่ความชอบของฉัน แต่ฉันจะใช้wp_content_dirในบางเว็บไซต์
xLRDxREVENGEx

ฉันไม่มีประสบการณ์กับเว็บไซต์หลายรายการดังนั้นฉันจึงไม่คุ้นเคยกับการทำงานของสิ่งนี้ในสถานการณ์นั้น ฉันชอบติดตั้ง WP ในไดเรกทอรีเพียงเพื่อรักษาสิ่งที่สะอาดและไม่ยุ่งเหยิงราก
Milo

โครงสร้างไฟล์ของฉันน่าจะเป็นโครงสร้างที่ประณีตที่สุด home/usr/public_html/site1 home/usr/public_html/site2และอื่น ๆ และจากนั้นwp_content_dirมักจะเป็น cdn
xLRDxREVENGEx

หากการติดตั้ง WP เป็นเพียงสิ่งเดียวที่นั่นก็คงดี แต่ฉันส่วนใหญ่ทำงานกับเซิร์ฟเวอร์ของคนอื่น ๆ ที่มีหลายร้อยไฟล์และไดเรกทอรีที่เกลื่อนไปด้วย
Milo

ความเข้าใจของฉันถูกต้องหรือไม่ว่า site_url () และ home_url () เหมือนกันเว้นแต่มีการตั้งค่าไดเรกทอรีติดตั้ง wordpress ให้แตกต่างจากรูท
Praveen

3

TLDR:

ในการติดตั้งที่ไม่ได้มาตรฐานคุณสามารถวางไฟล์ WordPress ในไดเรกทอรีย่อยของรูทเว็บไซต์ของคุณ
... และยังอนุญาตให้ผู้เยี่ยมชมของคุณสามารถเข้าถึง WordPress "เว็บไซต์" ของคุณจาก URL โดเมน (รูท) ของเว็บไซต์ของคุณโดยไม่ต้องใส่ชื่อไดเรกทอรีย่อย:
(เช่น: 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 

โดยที่ค่าสำหรับค่าคงที่ WP จะมีความสำคัญเหนือกว่าค่าการตั้งค่า wp_options / WP

การกำหนดค่าที่แตกต่างกันสำหรับ WordPress

ในการติดตั้ง WordPress มาตรฐานมากที่สุดhome_urlและsite_urlจะมีค่าเท่ากัน
โดยไม่คำนึงถึงพวกเขาเป็นตัวแทนของสองสิ่งที่แตกต่าง

ในการติดตั้งที่ไม่ได้มาตรฐานอาจมีค่าแตกต่างกัน

หมายเหตุ:ฉันกำลังละทิ้งโพรโทคอลในคำตอบของฉันเพื่อให้อ่านง่ายขึ้น
ในโพสต์นี้ให้เตรียมตัวทุก URL ด้วย: https://, http://หรือ//
(ยกเว้นว่าฉันได้รวมไว้แล้ว)

( //เป็นrelativeโปรโตคอลและจะทำงานได้ทั้ง / ทั้งสองhttp://หรือhttps://)

การติดตั้งแบบมาตรฐาน (รวมถึงการติดตั้ง "คลิกเดียว")

home_url: เป็นหน้าแรกของเว็บไซต์ (wordpress) ของคุณตามที่ระบุในแถบที่อยู่ของผู้ใช้
site_url: เป็นไดเรกทอรีที่ไฟล์ wordpress ของคุณอยู่

WordPress ติดตั้ง 5 นาทีติดตั้งไฟล์เวิร์ดเพรสทั้งสองค่าจะเหมือนกัน - ไฟล์เวิร์ดเพรสจะถูกติดตั้งในโฟลเดอร์เดียวกันกับที่คุณต้องการให้คนอื่นใช้เว็บไซต์ของคุณหรือส่วนเวิร์ดเพรส (บล็อก) ของเว็บไซต์เซิร์ฟเวอร์ของคุณ

ตัวอย่างที่ 1:
ผู้ใช้เข้าถึงบล็อกของคุณที่: www.example.com,
ไฟล์ wordpress ที่ติดตั้งที่: www.example.comหรือโฟลเดอร์รูทของเว็บไซต์เซิร์ฟเวอร์ของคุณ

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

ตัวอย่างที่ 2:
ผู้ใช้เข้าถึงบล็อกของคุณที่: www.example.com/blog,
ไฟล์ wordpress ที่ติดตั้งที่: www.example.com/blogหรือในblogโฟลเดอร์ภายในรูทของเว็บไซต์ของคุณ

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

ในกรณีนี้www.example.comคือเว็บไซต์หลักและwww.example.com/blogเป็นรากฐานของบล็อกของคุณ
ที่นี่บล็อกของคุณถูกแยกออกจากและทำงานเป็นส่วนย่อยของเว็บไซต์หลักของคุณ
ในกรณีนี้เว็บไซต์หลักของคุณไม่ได้ควบคุมกำหนดหรือกำหนดสไตล์โดย WordPress
แค่บล็อกของคุณคือ URL ทั้งหมดในบล็อกของคุณจะถูกดำเนินการโดยwww.example.com/blog

หมายเหตุ: ในเอกสารประกอบ "เว็บไซต์ WordPress / เว็บไซต์" (ตรงข้ามกับ "ไซต์ / เว็บไซต์") หมายถึงไดเรกทอรีที่ติดตั้งไฟล์ WordPress ของคุณ ในกรณีนี้มันคือwww.example.com/blog- ทุกอย่างภายในblogโฟลเดอร์ "เว็บไซต์ WordPress" ในสถานการณ์นี้ไม่เหมือนกับโดเมนของคุณรูทหรือเว็บไซต์หลักของคุณ มันเป็นส่วนย่อยของเว็บไซต์โดยรวมของคุณ ประเภทของเว็บไซต์ในเว็บไซต์ ฉันพูดถึงสิ่งนี้เนื่องจากคำศัพท์สามารถดูเหมือนไม่ชัดเจนหรือสับสนเนื่องจากการตั้งค่านี้โดยเฉพาะ

การกำหนดค่าการติดตั้ง WordPress สำรอง

ให้ WordPress ไดเรกทอรีของตัวเองMethod II (With URL change)ส่วนที่

ตัวอย่างเช่นหลายคนไม่ต้องการอุดตันรูทโฟลเดอร์ของเว็บไซต์ด้วยไฟล์ wordpress ทั้งหมด
พวกเขาต้องการติดตั้งเวิร์ดเพรสในไดเรกทอรีย่อย * แต่มีการเข้าถึง "บล็อก" หรือ "เว็บไซต์ WordPress" ราวกับว่าไฟล์ถูกติดตั้งในรูทของรูทเซิร์ฟเวอร์สำหรับเว็บไซต์

นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งเมื่อ WordPress ใช้สร้างและเรียกใช้เว็บไซต์ทั้งหมดที่ไม่มีแม้แต่ "บล็อก"

ตัวอย่างที่ 3:
ผู้ใช้เข้าถึง "บล็อก" ของคุณที่: www.example.com,
ไฟล์ wordpress ติดตั้งที่: www.example.com/wordpressหรือโฟลเดอร์รูทของเว็บไซต์เซิร์ฟเวอร์ของคุณ

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

(หมายเหตุ: การกำหนดค่านี้จะไม่ทำงาน "นอกกรอบ" เพียงแค่เปลี่ยนค่าของตัวแปรเหล่านี้มันต้องการการเปลี่ยนแปลงการกำหนดค่าเพิ่มเติมเพื่อให้ทำงานได้อย่างถูกต้อง)
ดูที่การให้ WordPress ของตนเองเป็นไดเรกทอรีส่วนที่มีชื่อว่าMethod II (With URL change)วิธีการทำ

ในกรณีนี้home_urlและsite_urlควรเก็บค่าที่แตกต่าง

ในการตั้งค่านี้คุณต้องการให้เว็บไซต์ของคุณทำงานตรงเช่นถ้าไฟล์ WordPress ถูกติดตั้งในไดเรกทอรีรากของเซิร์ฟเวอร์สำหรับเว็บไซต์ของคุณ ...
แต่สำหรับวัตถุประสงค์ขององค์กรบนเซิร์ฟเวอร์
คุณจริงมีไฟล์เวิร์ดเพรสของคุณในโฟลเดอร์ที่เรียกว่าwordpressในเซิร์ฟเวอร์ ไดเรกทอรีรากสำหรับเว็บไซต์ของคุณ

ดังนั้นผู้ใช้จะพิมพ์www.example.comเพื่อรับโฮมเพจ WordPress ของคุณแทนwww.example.com/wordpress

ฟังก์ชัน wordpress <--> ตัวแปรฐานข้อมูล <--> Wordpress Constant

ส่วนนี้ถือว่าตัวอย่างที่ 3 การกำหนดค่าด้านบน
URL แถบที่อยู่: www.example.com
ไฟล์ wordpress: / ไดเรกทอรี wordpress

(อีกกรณีเป็นเรื่องเล็กน้อย: ตัวแปร / ฟังก์ชั่นทั้งหมดถือ / คืนค่าเดียวกัน)

วิธีการตั้งค่าสำหรับsite_urlและhome_url

ก่อนอื่นให้ฉันทราบsiteurlและhomeเก็บค่าที่ส่งคืนโดยฟังก์ชันด้านบน

1) โดยปกติคุณตั้งค่าเหล่านี้บนแผง backend / dashboard / admin
Settings -> General ->
siteurl WordPress: ที่อยู่ WordPress: https://www.example.com/wordpress
home ที่อยู่เว็บไซต์: https://www.example.com

(ไม่รวมเครื่องหมายสแลชต่อท้ายที่นี่ - ซึ่งจะถูกกำหนดค่าไว้ที่อื่น)

2) อีกวิธีหนึ่งคือคุณตั้งค่าเหล่านี้ในฐานข้อมูล WordPress ของคุณ:
wp_optionsตาราง ->

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

(ไม่รวมเครื่องหมายสแลชต่อท้ายที่นี่ - ซึ่งจะถูกกำหนดค่าไว้ที่อื่น)

3) แก้ไขwp-config.php
กำหนดค่าคงที่เฉพาะเหล่านี้เพื่อเก็บค่า
กำหนดWP_HOMEและWP_SITEURLตั้งค่าโดยการแทรกบรรทัดเหล่านี้ไปยังด้านบนของwp-config.phpไฟล์:

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

(ไม่รวมเครื่องหมายสแลชต่อท้ายที่นี่ - ซึ่งจะถูกกำหนดค่าไว้ที่อื่น)

การอ้างอิง: WP_SITEURLและWP_HOME

หมายเหตุ: นี่เป็นสิ่งที่สับสน
(ฉันหวังว่า WordPress จะติดป้ายการตั้งค่าที่คล้ายกับชื่อ php ของพวกเขา
เช่นWordpress Site AddressและHome Page Addressหรือสิ่งที่ชัดเจนกว่าเช่นlocation of WordPress Site core filesและbrowser url to access WordPress home page)

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

ตอนนี้ที่นี่เป็นที่ที่มันยาก!

หากคุณกำหนดค่าคงที่เหล่านั้นในwp-config.phpไฟล์ของคุณไม่สำคัญว่าคุณมีค่าใดในหน้าฐานข้อมูล / การตั้งค่า
ในความเป็นจริงคุณจะไม่สามารถแก้ไขค่านี้ผ่านทางส่วนหลัง (มันจะเป็นสีเทา) คุณยังคงสามารถแก้ไขได้โดยแก้ไขฐานข้อมูลของคุณ แต่การทำเช่นนั้นจะไม่มีผลกับไซต์ของคุณในขณะที่ค่าคงที่มีอยู่ในไฟล์ wp-config ของคุณ

คุณกำหนดค่าไฟล์จะไม่เปลี่ยนค่าในฐานข้อมูลของคุณ (หรือหน้าการตั้งค่าด้วยเหตุนี้คุณ) ค่าหน้าฐานข้อมูล / การตั้งค่าของคุณจะถูกละเว้นแทน ค่าในการแทนที่ wp-config หรือมีความสำคัญเหนือกว่าการตั้งค่าฐานข้อมูลของคุณ

ดังนั้น ... เพื่อสรุป (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 

โดยที่ค่าสำหรับค่าคงที่ WP จะมีความสำคัญเหนือกว่าค่าการตั้งค่า wp_options / WP

ค่าบันทึก wp_options และค่าติดตั้ง WP นั้นเหมือนกัน
แก้ไขหนึ่งโดยนิยามแก้ไขอีก
มันเป็นเพียง 2 วิธีในการเข้าถึงตัวแปรเดียวกัน

ในทางตรงกันข้ามค่าคงที่ของ WordPress นั้นไม่เหมือนใครและเป็นอิสระ
ภายในค่าคงที่ WordPress (PHP) จะแทนที่ค่าฐานข้อมูลของพวกเขา
หากค่าคงที่ถูกกำหนดใน wp-config จะไม่เปลี่ยนฐานข้อมูล
แต่ภายใน WordPress จะต้องการ / ใช้ค่าของมันเสมอแทนที่จะเป็น db หนึ่ง


3

site_url()และhome_url()ฟังก์ชั่นที่คล้ายกันและสามารถนำไปสู่ความสับสนในวิธีการที่พวกเขาทำงาน

site_url()ฟังก์ชั่นดึงค่าค่าสำหรับsiteurlในwp_optionsตารางในฐานข้อมูลของคุณ

นี่คือ URL ไปยังไฟล์หลักของ WordPress
หากไฟล์หลักของคุณอยู่ในไดเรกทอรีย่อยบนเว็บเซิร์ฟเวอร์ของคุณคุ้มค่าจะเป็น /wordpresshttp://example.com/wordpress

home_url()ฟังก์ชั่นดึงค่าhomeในwp_optionsตารางในฐานข้อมูลของคุณ

นี่คือที่อยู่ที่คุณต้องการให้ผู้คนเข้าชมเพื่อดูเว็บไซต์ WordPress ของคุณ

หากไฟล์หลัก WordPress ของคุณมีอยู่/wordpressแต่คุณต้องการให้ URL เว็บไซต์ของคุณเป็นhttp://example.comค่าhttp://example.comหลัก


2

ในการตอบคำถามที่สองของคุณ:

ถาม: หากถูกต้องฉันจะได้รับ wordpress เพื่อส่งคืนhttp://example.com/หรือไม่

คุณทำไม่ได้นอกจากว่าคุณจะใช้ขั้นตอนการให้ WordPress เป็นไดเรกทอรีของตัวเอง การใช้สิ่งนี้หมายความว่าคุณใส่ไฟล์หลักของ WordPress ลงใน/blogหรือ/WordPressจากนั้นindex.phpเข้าไปในรูทของคุณ

หากคุณตัดสินใจที่จะวางเวิร์ดเพรสไว้ในไดเรกทอรีของตัวเองคุณจะต้องใช้home_url()เพื่อไปindex.phpและsite_url()รับไฟล์หลักและเช่นนั้น

Refrences:
Codex สำหรับsite_url
Codex สำหรับhome_url
Codex สำหรับการให้ Wordpress Directory ของตนเอง


-1

วิธีที่ง่ายที่สุดในการรับ URL ไซต์โดยไม่มีไดเรกทอรีย่อยใด ๆ ( http://example.com/แทนที่จะเป็นhttp://example.com/blog ) เพียงใช้แบ็กสแลช/

ตัวอย่างเช่นถ้าคุณพิมพ์:

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

มันจะสร้างลิงค์ที่ไปยังโดเมนของคุณ


ขอบคุณสำหรับการเข้าร่วม น่าเสียดายที่สิ่งนี้ไม่ตอบคำถามของ OP มีสาเหตุหลายประการที่บุคคลต้องการใช้ฟังก์ชัน wordpress OP ถามเกี่ยวกับ ไม่น่าเป็นไปได้ที่ OP ต้องการเพิ่มลิงก์ไปยังหน้าแรกของพวกเขาผ่านทาง html เช่นโดยการแก้ไขโพสต์ มีโอกาสมากขึ้นที่ OP จะแก้ไขไฟล์ธีม php หรือไฟล์ปลั๊กอิน ไม่ว่าในกรณีใดพวกเขากำลังทำงานกับ php ไม่ใช่ html สุดท้ายในขณะที่ OP คาดว่าจะไม่มีค่า/สำหรับไซต์นี้บนไซต์อื่น OP อาจคาดหวังว่าจะส่งคืนไดเรกทอรีย่อย ขึ้นอยู่กับการกำหนดค่า WP สำหรับแต่ละไซต์
SherylHohman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.