Sự khác biệt giữa home_url () và site_url ()


65

Sự hiểu biết của tôi là site_url()trả về vị trí của các tập tin lõi wordpress.

Vì vậy, nếu blog của tôi được lưu trữ tại http://example.com/blogthì site_url()lợi nhuậnhttp://example.com/blog

Nhưng sau đó thì home_url()khác nhau như thế nào ? Đối với tôi, home_url()trả lại điều tương tự:http://example.com/blog

Nếu đó là chính xác, sau đó tôi có thể nhận được wordpress http://example.com/?


4
Bạn đang hỏi hai câu hỏi cùng một lúc cho một câu hỏi rất quan trọng. Câu trả lời cho "Sự khác biệt giữa home_url () và site_url () là gì?" khác với câu hỏi: "Làm cách nào để WordPress trả lại gốc URL mà không cần thư mục con được cài đặt?"
Volomike

Câu trả lời:


51

Bạn đang hỏi hai câu hỏi cùng một lúc:

  1. Sự khác biệt giữa home_url()và là site_url()gì?
  2. Làm cách nào để WordPress trả lại URL gốc mà không cần thư mục con được cài đặt?

Dưới đây là câu trả lời và tôi đã xác nhận với Andrew Nacin, một nhà phát triển cốt lõi của WordPress, cũng như chạy một số thử nghiệm máy chủ để xác nhận những gì Andrew nói với tôi.

Câu hỏi 1

Trong Chung> Cài đặt của wp-admin, home_url()tham chiếu trường có nhãn "Địa chỉ trang web (URL)". Nhầm lẫn hả? Vâng, nó nói "Địa chỉ trang web" để bạn có thể giả sử site_url(), nhưng bạn đã sai . Chạy thử nghiệm của riêng bạn và bạn sẽ thấy. (Bạn có thể tạm thời thả một echo H1trường có site_url()home_url()các giá trị ở đầu hàm.php của chủ đề.)

Trong khi đó, site_url()tham chiếu trường có nhãn "Địa chỉ WordPress (URL)" trong Chung> Cài đặt.

Vì vậy, nếu bạn muốn tham chiếu đường dẫn vật lý có thể như gọi đường dẫn thư mục của plugin trên URL để tải hình ảnh hoặc gọi đường dẫn thư mục của chủ đề để tải hình ảnh, bạn thực sự nên sử dụng các chức năng khác cho những điều đó - nhìn vào plugins_url()get_template_directory_uri().

Các site_url()sẽ luôn luôn là vị trí mà bạn có thể tiếp cận trang web bằng cách tacking trên /wp-adminở cuối dòng, trong khi home_url()sẽ không đáng tin cậy được vị trí này.

Đây home_url()sẽ là nơi bạn đã đặt trang chủ của mình bằng cách đặt trường Chung> Cài đặt "Địa chỉ trang web (URL)".

Câu hỏi 2

Vì vậy, nếu tôi đã đặt blog của mình vào http://example.com/blogexample.comchỉ là một trang web tĩnh nơi tôi thích chủ đề danh mục đầu tư, thì đây sẽ là một kịch bản phù hợp với câu hỏi của bạn. Trong trường hợp như vậy, sau đó tôi sẽ sử dụng đoạn mã này:

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

Bạn có liên kết đến cuộc thảo luận với A.Nacin không?
kaiser

1
Đó là qua email. Lấy làm tiếc. Ồ, và cảm ơn vì đã chỉnh sửa - Tôi sẽ nhớ cú pháp đó thay đổi vào lần tới.
Volomike

8
Tôi đã mất rất nhiều thời gian và rất nhiều đau đớn để nhận ra rằng 'Địa chỉ trang web (URL)' = 'nhà' và 'Địa chỉ WordPress (URL)' = 'siteurl'. Họ chắc chắn nên thay đổi những nhãn hiệu đó.
Jbm

Câu trả lời của bạn cho câu hỏi thứ hai trúng số độc đắc!
Devner

7

Nếu bạn muốn WP được cài đặt trong một thư mục nhưng trang chủ trên gốc tên miền của bạn, bạn cần di chuyển tệp index.php chính ra gốc tên miền của mình và chỉnh sửa câu lệnh yêu cầu để trỏ vào thư mục của bạn.

Quá trình này được phác thảo ở đây: Cung cấp cho WordPress Thư mục riêng của nó .


Tôi luôn luôn sử dụng home_url()vì tôi đang ở chế độ mạng wp. Tôi chỉ cung cấp cho WordPress thư mục riêng của mình một lần và nó không phải là sở thích của tôi. Nhưng tôi làm tuy nhiên sử dụng wp_content_dirtrên một số trang web.
xLRDxREVENGEx

Tôi không có bất kỳ kinh nghiệm nào với multisite, vì vậy tôi không quen cách thức hoạt động của công cụ này trong tình huống đó. Tôi thích cài đặt WP trong một thư mục chỉ để giữ mọi thứ sạch sẽ và không làm lộn xộn root.
Milo

cấu trúc tập tin của tôi có lẽ là một trong những cái gọn gàng nhất xung quanh. home/usr/public_html/site1 home/usr/public_html/site2và cứ thế và wp_content_dirthường là trên một cdn
xLRDxREVENGEx

Nếu một bản cài đặt WP là thứ duy nhất thì nó sẽ ổn, nhưng tôi chủ yếu làm việc trên các máy chủ của những người khác với hàng trăm tệp và thư mục bị vấy bẩn.
Milo

Sự hiểu biết của tôi có đúng không khi site_url () và home_url () giống nhau, trừ khi người ta thiết lập thư mục cài đặt wordpress của họ khác với root?
Praveen

3

TLDR:

Trong bản cài đặt không chuẩn, bạn có thể đặt các tệp WordPress của mình vào thư mục con của trang web gốc.
... và vẫn cho phép khách truy cập của bạn đến khách truy cập truy cập vào "trang web" WordPress của bạn từ URL tên miền (gốc) của trang web của bạn mà không cần thêm tên thư mục con:
(ví dụ: 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 

Trong đó giá trị cho hằng số WP được ưu tiên hơn giá trị Cài đặt wp_options / WP.

Các cấu hình khác nhau cho WordPress

Trong các cài đặt WordPress tiêu chuẩn nhất , home_urlsite_urlsẽ có cùng giá trị.
Bất kể, họ đại diện cho hai điều khác nhau.

Trong một cài đặt không chuẩn , chúng có thể có các giá trị khác nhau.

LƯU Ý: Tôi sẽ bỏ giao thức trong câu trả lời của mình để dễ đọc hơn.
Trong bài đăng này, CHUẨN BỊ MỌI URL với : https://, http://HOẶC //
(trừ khi tôi đã bao gồm nó).

( //relativegiao thức và sẽ hoạt động cho một trong hai http://hoặc cả hai https://)

Cài đặt tiêu chuẩn (bao gồm cả cài đặt "Một lần nhấp")

home_url: là trang chủ của trang web (wordpress) của bạn, như được chỉ định trong thanh địa chỉ của người dùng.
site_url: là thư mục chứa tập tin wordpress của bạn.

Cài đặt trong 5 phút của WordPress sẽ cài đặt các tệp wordpress, hai giá trị này sẽ giống nhau - các tệp wordpress sẽ được cài đặt trong cùng một thư mục mà bạn muốn mọi người sử dụng để giải quyết trang web của bạn hoặc phần wordpress (blog) trên trang web của máy chủ của bạn.

Ví dụ 1:
người dùng truy cập blog của bạn tại : www.example.com,
các tệp wordpress được cài đặt tại : www.example.com, hoặc thư mục gốc của trang web máy chủ của bạn.

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

Ví dụ 2:
người dùng truy cập blog của bạn tại : www.example.com/blog,
các tệp wordpress được cài đặt tại : www.example.com/blog, hoặc trong blogthư mục bên trong thư mục gốc của trang web của bạn.

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

Trong trường hợp www.example.comnày là trang web chính và www.example.com/bloglà gốc của blog của bạn.
Ở đây blog của bạn được tách ra và hoạt động như một tập hợp con của trang web chính của bạn.
Trong trường hợp này, trang web chính của bạn không được kiểm soát, xác định hoặc tạo kiểu bởi WordPress.
Chỉ cần blog của bạn là. Tất cả các url trong blog của bạn sẽ được tiến hành bởiwww.example.com/blog

Lưu ý: Trong tài liệu, "trang web / trang web Wordpress" (trái ngược với "trang web / trang web" đơn giản) đề cập đến thư mục nơi các tệp WordPress của bạn được cài đặt. Trong trường hợp này, nó là www.example.com/blog- mọi thứ trong blogthư mục. "Trang web WordPress", trong kịch bản này, không giống với tên miền, gốc hoặc trang web chính của bạn. Nó là một tập hợp con của trang web tổng thể của bạn. Kiểu như một trang web bên trong một trang web. Tôi đề cập đến điều này vì thuật ngữ có thể không rõ ràng hoặc khó hiểu, với thiết lập cụ thể này.

Cấu hình cài đặt WordPress thay thế

Cung cấp cho WordPress Thư mục riêng của nó , phần Method II (With URL change).

Ví dụ, nhiều người không muốn làm tắc nghẽn thư mục gốc của trang web của họ với tất cả các tệp wordpress.
Họ muốn cài đặt wordpress trong thư mục con, * nhưng có "blog" hoặc "trang web WordPress" được truy cập như thể các tệp được cài đặt trong thư mục gốc của máy chủ cho trang web.

Điều này đặc biệt đúng khi WordPress được sử dụng để xây dựng và chạy toàn bộ trang web thậm chí không có "blog".

Ví dụ 3:
người dùng truy cập vào "blog" của bạn tại : www.example.com,
các tệp wordpress được cài đặt tại : www.example.com/wordpress, hoặc thư mục gốc của trang web máy chủ của bạn.

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

(Lưu ý: cấu hình này sẽ không hoạt động "ngoài luồng" chỉ bằng cách thay đổi giá trị của các biến này. Nó yêu cầu thay đổi cấu hình bổ sung để hoạt động chính xác)
Xem Cung cấp cho WordPress Thư mục riêng của nó , phần có tiêu đề Method II (With URL change)để làm điều này.

Trong này trường hợp home_urlsite_urlnên giữ giá trị khác nhau.

Trong thiết lập này, bạn muốn trang web của bạn hoạt động chính xác như thể các tệp WordPress được cài đặt trong thư mục gốc của máy chủ cho trang web của bạn ...
NHƯNG, với mục đích tổ chức trên máy chủ,
bạn thực sự có các tệp WordPress của mình trong một thư mục được gọi wordpresstrong máy chủ thư mục gốc cho trang web của bạn.

Vì vậy, người dùng sẽ nhập vào www.example.comđể lấy trang chủ WordPress của bạn, thay vìwww.example.com/wordpress

Hàm wordpress <-> biến cơ sở dữ liệu <-> Hằng số Wordpress

Phần này giả sử cấu hình ví dụ 3 ở trên.
url thanh địa chỉ: www.example.com
tập tin wordpress: / thư mục wordpress

(Các trường hợp khác là tầm thường: Tất cả các biến / hàm giữ / trả về cùng một giá trị.)

Cách đặt giá trị cho site_urlhome_url

Trước tiên, hãy để tôi lưu ý rằng siteurlhomelưu trữ các giá trị được trả về bởi các hàm trên

1) Thông thường, bạn đặt các giá trị này trên bảng điều khiển phụ trợ / bảng điều khiển / quản trị viên
Settings -> General ->
siteurl WordPress: Địa chỉ WordPress: https://www.example.com/wordpress
home Địa chỉ trang web: https://www.example.com

(không bao gồm dấu gạch chéo ở đây - sẽ được cấu hình ở nơi khác)

2) Ngoài ra, bạn đặt các giá trị này trong cơ sở dữ liệu WordPress của mình:
wp_optionsbảng ->

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

(không bao gồm dấu gạch chéo ở đây - sẽ được cấu hình ở nơi khác)

3) Chỉnh sửa wp-config.php
Xác định các hằng số cụ thể này để giữ các giá trị của bạn
Xác định WP_HOMEWP_SITEURLcài đặt bằng cách chèn các dòng này vào đầu wp-config.phptệp của bạn :

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

(không bao gồm dấu gạch chéo ở đây - sẽ được cấu hình ở nơi khác)

Tham khảo: WP_SITEURLWP_HOME

LƯU Ý: Điều này thật khó hiểu
(Tôi thực sự muốn WordPress đã gắn nhãn Cài đặt tương tự như tên php của họ,
chẳng hạn như Wordpress Site AddressHome Page Addressmột cái gì đó rõ ràng hơn như location of WordPress Site core filesbrowser url to access WordPress home page)

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

Bây giờ đây là nơi nó trở nên khó khăn!

NẾU bạn đã xác định các hằng số đó trongwp-config.phptệpcủa mình,việc bạn có giá trị nào trong trang cơ sở dữ liệu / cài đặt của bạn không quan trọng .
Trên thực tế, bạn sẽ không thể sửa đổi giá trị này thông qua mặt sau (nó sẽ bị mờ đi). Bạn vẫn có thể sửa đổi bằng cách chỉnh sửa cơ sở dữ liệu của mình, nhưng làm như vậy sẽ không có hiệu lực trên trang web của bạn, trong khi các hằng số tồn tại trong tệp wp-config của bạn.

Tệp cấu hình của bạn sẽ không thay đổi các giá trị trong cơ sở dữ liệu của bạn (hoặc do đó bạn cài đặt trang). Thay vào đó, giá trị trang cơ sở dữ liệu / cài đặt của bạn sẽ bị bỏ qua . Các giá trị trong ghi đè wp-config hoặc được ưu tiên hơn cài đặt cơ sở dữ liệu của bạn.

Vì vậy, ... để kết thúc (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 

Trong đó giá trị cho hằng số WP được ưu tiên hơn giá trị Cài đặt wp_options / WP.

Giá trị bản ghi wp_options và giá trị Cài đặt WP là như nhau.
Chỉnh sửa một, theo định nghĩa chỉnh sửa khác.
Nó chỉ là 2 cách khác nhau để truy cập cùng một biến.

Mặt khác, các hằng số WordPress là duy nhất và độc lập.
Trong nội bộ, các hằng số WordPress (PHP) ghi đè lên các đối tác db của chúng.
Nếu một hằng được định nghĩa trong wp-config, nó không thay đổi cơ sở dữ liệu.
Nhưng bên trong WordPress sẽ luôn thích / sử dụng giá trị của nó thay vì db.


3

Các chức năng site_url()home_url()tương tự nhau và có thể dẫn đến sự nhầm lẫn trong cách chúng hoạt động.

Các site_url()chức năng lấy giá trị giá trị cho siteurltrong wp_optionsbảng trong cơ sở dữ liệu của bạn.

Đây là URL đến các tệp cốt lõi của WordPress.
Nếu các tệp cốt lõi của bạn tồn tại trong thư mục con /wordpresstrên máy chủ web của bạn, giá trị sẽ là http://example.com/wordpress.

Các home_url()chức năng lấy giá trị cho hometrong wp_optionsbảng trong cơ sở dữ liệu của bạn.

Đây là địa chỉ bạn muốn mọi người ghé thăm để xem trang web WordPress của bạn.

Nếu các tệp cốt lõi WordPress của bạn tồn tại /wordpress, nhưng bạn muốn URL trang web của bạn là http://example.comgiá trị gia đình phải có http://example.com.


2

Để trả lời câu hỏi thứ hai của bạn:

H: Nếu đúng, tôi có thể lấy wordpress để trả về http://example.com/ không?

Bạn không thể, trừ khi bạn thực hiện các bước thư mục riêng của Giving WordPress . Sử dụng điều này có nghĩa là bạn đặt các tệp cốt lõi của WordPress vào /bloghoặc /WordPresssau đó index.phpvào thư mục gốc của bạn.

Nếu bạn quyết định đặt WordPress vào thư mục riêng của mình thì bạn sẽ sử dụng home_url()để truy cập index.phpsite_url()nhận các tệp cốt lõi, v.v.

Chuyển hướng:
Codex cho site_url
Codex cho home_url
Codex để cung cấp thư mục riêng của Wordpress


-1

Cách dễ nhất để lấy url trang web mà không cần bất kỳ thư mục con nào ( http://example.com/ thay vì http://example.com/blog ), chỉ cần sử dụng dấu gạch chéo ngược /

Ví dụ: nếu bạn gõ:

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

Nó sẽ tạo ra một liên kết đến miền của bạn


Cảm ơn vì đã tham gia. Thật không may, điều này không trả lời câu hỏi được đặt ra bởi OP. Có nhiều lý do tại sao một người cần sử dụng các chức năng wordpress mà OP yêu cầu. Không chắc là OP chỉ muốn thêm liên kết đến trang chủ của họ thông qua html, chẳng hạn như bằng cách chỉnh sửa một bài đăng. Nhiều khả năng, OP đang chỉnh sửa tệp chủ đề php hoặc tệp plugin. Trong mọi trường hợp, họ đang làm việc với php, không phải html. Cuối cùng, trong khi OP mong đợi một giá trị mà không có /cho trang web này , thì trên một trang web khác, OP có thể mong đợi một thư mục con được trả lại. Nó phụ thuộc vào cấu hình WP cho từng trang web.
SherylHohman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.