รับ URL หน้าปัจจุบัน (รวมถึงการแบ่งหน้า)


13

มีฟังก์ชั่น WP เพื่อรับ URL ที่ถูกต้องของหน้าปัจจุบันโดยอัตโนมัติหรือไม่? ความหมายถ้าฉันเพียงแค่เปิดโพสต์เดียวฟังก์ชันจะส่งกลับเช่นเดียวget_permalink()แต่ถ้าผมอยู่บนอินสแตนซ์ที่ใส่เลขหน้าของหน้า (เมื่อเลขหน้าผ่านความเห็น) กลับมาทำงานเช่นเดียวกับget_pagenum_link(get_query_var('paged'))จะทำ

ฉันค้นหา Codex แล้ว แต่ไม่พบสิ่งที่ต้องการ (แต่ยังget_pagenum_link()ไม่มีการบันทึกไว้ที่นั่น)

ฉันรู้เกี่ยวกับฟังก์ชั่นนี้แล้ว แต่ฉันจะดีใจถ้ามีฟังก์ชั่น "ดั้งเดิม" WP ที่ทำงาน

ขอบคุณล่วงหน้า! ขอแสดงความนับถือRené

คำตอบ:


27

นอกจากนี้ในการตอบ Rajeev Vyas ของคุณไม่จำเป็นต้องส่งผ่านพารามิเตอร์ที่ไม่ว่างเปล่าใด ๆ add_query_arg()ที่จะ ต่อไปนี้ทำงานได้ดีสำหรับฉันเสมอ:

// relative current URI:
$current_rel_uri = add_query_arg( NULL, NULL );

// absolute current URI (on single site):
$current_uri = home_url( add_query_arg( NULL, NULL ) );

ฟังก์ชั่นตรงกับ$_SERVER[ 'REQUEST_URI' ]และใช้urlencode_deep()กับมัน ดูhttps://github.com/WordPress/WordPress/blob/3.8/wp-includes/functions.php#L673

แก้ไข: ตามที่$_SERVER[ 'REQUEST_URI' ]แสดงถึงอินพุตของผู้ใช้ที่ไม่ถูกกรองหนึ่งควรหลีกเลี่ยงค่าที่ส่งคืนadd_query_arg()เมื่อบริบทเปลี่ยนไป ตัวอย่างเช่นใช้esc_url_raw()สำหรับการใช้งานฐานข้อมูลesc_attr()หรือesc_url()สำหรับ HTML

ปรับปรุง

ตัวอย่างที่แสดงที่ควรสร้าง URI แบบสัมบูรณ์ (ที่มีรูปแบบและโฮสต์) ไม่ทำงานบนไซต์หลายไซต์พร้อมกับไดเรกทอรีย่อยตามที่home_url()จะส่งคืน URI ที่สมบูรณ์รวมถึงส่วนของเส้นทาง ทางออกที่ดีกว่าสำหรับโค้ดที่รับรู้หลายไซต์น่าจะเป็น:

// absolute URI in multisite aware environment
$parts = parse_url( home_url() );
$current_uri = "{$parts['scheme']}://{$parts['host']}" . add_query_arg( NULL, NULL );

WordPress core ไม่รองรับพอร์ตผู้ใช้หรือรหัสผ่านใน URL ไซต์หลายไซต์ดังนั้นควรมีเพียงพอ


น่าผิดหวังที่ OP ไม่ได้เลือกคำตอบนี้เป็น Solution ซึ่งเป็น ขอบคุณ.
cfx

3
global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );

ไม่ใช่ฟังก์ชั่น แต่ใช้รหัสเวิร์ดเพรสแน่นอน

http://kovshenin.com/2012/current-url-in-wordpress/


2
มันทำงานได้บางส่วน แต่บางอย่างไม่ทำงานเหมือนที่ฉันต้องการ: พารามิเตอร์เช่นyearถูกเพิ่มเข้าไปในสตริงการสืบค้นแม้ว่าจะไม่เคยมีมาก่อนและพารามิเตอร์อื่น ๆ เช่นreplytocomพารามิเตอร์หายไป คุณรู้วิธีแก้ปัญหานี้หรือไม่?
René Schubert

0

1) $_SERVER['REQUEST_URI']- มันคืน URL ในการเข้าถึงหน้าซึ่งจะดำเนินการสคริปต์ หากคุณจำเป็นต้องพิมพ์http://www.example.com/product.php?id=5ให้เข้าถึงหน้าแล้วผลตอบแทน$_SERVER['REQUEST_URI']/product.php?id=5

2) $_SERVER['DOCUMENT_ROOT']- ส่งคืนไดเรกทอรีรากของเซิร์ฟเวอร์ที่ระบุไว้ในไฟล์กำหนดค่าของเซิร์ฟเวอร์ ตัวแปรนี้มักจะส่งคืนพา ธ เช่นเดียวกับ/usr/yoursite/wwwใน Linux และD:/xamps/xampp/htdocsใน windows

3) $_SERVER['HTTP_HOST']- ส่งคืนชื่อโฮสต์ตามที่พบในส่วนหัว http ตัวแปรนี้มักจะคืนค่าเส้นทางเช่นexample.comเมื่อคุณพบhttp://example.comในแถบที่อยู่ของเบราว์เซอร์และกลับมาwww.example.comเมื่อคุณเห็นhttp://www.example.comในแถบที่อยู่ นี้จะเป็นประโยชน์มากเมื่อคุณได้เพื่อรักษาเซสชั่นในขณะที่การชำระเงินออนไลน์โดยใช้ PHP ตั้งแต่เซสชั่นเก็บไว้ไม่ได้เช่นเดียวกับhttp://example.comhttp://www.example.com

4) $_SERVER['HTTP_USER_AGENT']- ส่งคืนรายละเอียด (เบราว์เซอร์) ของตัวแทนผู้ใช้ที่เข้าถึงเว็บเพจ เราสามารถใช้strpos($_SERVER["HTTP_USER_AGENT"],”MSIE”)เพื่อตรวจจับ Microsoft Internet explorer หรือคุณสามารถใช้strpos($_SERVER["HTTP_USER_AGENT"],”Firefox”)เพื่อตรวจจับเบราว์เซอร์ Firefox ใน PHP

5) $_SERVER['PHP_SELF']- ส่งคืนชื่อไฟล์ของสคริปต์ดำเนินการในปัจจุบัน สมมติว่าคุณกำลังเข้าถึง URL http://www.example.com/product.php?id=5จากนั้น$_SERVER['PHP_SELF']ส่งคืน/product.phpสคริปต์ของคุณ

6) $_SERVER['QUERY_STRING']- คืนสตริงข้อความค้นหาหากใช้สตริงข้อความค้นหาเพื่อเข้าถึงสคริปต์ที่กำลังเรียกใช้งาน สตริงการสืบค้นคือสตริงที่มีอยู่หลังจาก“?” sign.if ที่คุณใช้$_SERVER['QUERY_STRING']ในสคริปต์ที่ใช้งาน URL ต่อไปนี้http://www.example.com/index.php?id=5&page=productจากนั้นจะส่งคืนid=5&page=productสคริปต์ของคุณ

7) $_SERVER['REMOTE_ADDR']- ส่งคืนที่อยู่ IP ของเครื่องระยะไกลที่เข้าถึงหน้าปัจจุบัน แต่คุณไม่สามารถพึ่งพา$_SERVER['REMOTE_ADDR']เพื่อรับที่อยู่ IP ที่แท้จริงของเครื่องของลูกค้า ดูบทความนี้เพื่อทราบวิธีรับ IP จริงใน PHP

8) $_SERVER['SCRIPT_FILENAME']- ส่งคืนเส้นทางที่แน่นอนของไฟล์ซึ่งกำลังดำเนินการในปัจจุบัน มันจะคืนค่าพา ธ เช่นเดียวกับvar/example.com/www/product.phpใน Linux และพา ธ เหมือนกับD:/xampp/xampp/htdocs/test/example.phpใน Windows


1
โปรดจำไว้ว่าไม่มีของเหล่านั้นใน CLI ของคุณและดังนั้นจึงไม่มีประโยชน์สำหรับงาน cron
ไกเซอร์

0

wp_guess_urlเป็นสิ่งที่คุณกำลังมองหา

เดา URL สำหรับเว็บไซต์

จะลบลิงก์ wp-admin เพื่อดึงเฉพาะคืนค่า URL ที่ไม่อยู่ในไดเรกทอรี wp-admin


สิ่งนี้จะส่งคืน URL ที่แตกต่างอย่างสิ้นเชิงนอกเหนือจากหน้าปัจจุบันเมื่อฉันพยายามใช้
เคอร์บี้

0

add_query_args( null, null ) จะสร้างองค์ประกอบอาร์เรย์ด้วยคีย์ว่าง ( $qs[""] = null) แม้ว่ามันจะไม่ส่งผลกระทบต่อผล


ตามที่add_query_arg () | ฟังก์ชั่น | WordPress Developer Resources , พารามิเตอร์ที่ 2, 3 เป็นทางเลือกและสามารถละเว้นได้

add_query_args( null, null )อาจสั้นกว่านี้

$current_url = add_query_args( [] );

นอกจากนี้ยังมีรุ่นที่สั้นที่สุดแม้ว่าจะไม่แนะนำเนื่องจากพารามิเตอร์ที่ 1 เป็นพารามิเตอร์ที่จำเป็น

$current_url = add_query_args();

นอกจากนี้โปรดทราบว่าทั้งสองhome_url( add_query_vars( [] ) )และhome_url( add_query_arg( null, null ) ) อาจไม่ส่งคืน URL จริงเมื่อติดตั้ง WordPress ในไดเรกทอรีย่อย

เช่นhttps://example.com/wp/wp/fooอาจจะมีการส่งกลับเมื่อ WordPress https://example.com/wp/มีการติดตั้งใน


อัปเดต: 2017/01/23

เวอร์ชันของฉันอ้างอิงจากโซลูชันของ David เพื่อรับ URL ที่สมบูรณ์

$parts = parse_url(home_url());
$uri   = $parts['scheme'] . '://' . $parts['host'];

if (array_key_exists('port', $parts)) {
    $uri .= ':' . $parts['port'];
}

$uri .= add_query_arg([]);

0

สำหรับฉัน<?php esc_url(the_permalink()); ?>ทำงานได้ (ในหน้าเก็บถาวรพร้อมเลขหน้า)


เป็นไปไม่ได้ the_permalink()สะท้อนความคิดเห็นที่หลบหนีมันจะไม่ส่งคืนสิ่งใด esc_url()ไม่ได้รับอะไรเลยและถ้ามันจะมันจะเป็น URL ของหนี
fuxia

คุณพูดถูกมันใช้งานได้เพียงเพราะฉันคิดว่าแคช
Henning Fischer

-1

ตอนนี้ฉันไม่ได้แบ่งหน้า แต่คุณสามารถใช้ฟังก์ชั่นนี้เพื่อให้ได้ url ภายในลูป

<?php $ID = get_the_ID(); 
echo get_permalink( $ID ); ?>

หรืออื่นถ้าคุณไม่ต้องการใช้ php คุณสามารถเลือกใช้วิธี jquery ได้ที่นี่ (สิ่งนี้จะช่วยให้คุณทำงานนอกวงได้)

$(document).ready(function () {
var vhref = $(location).attr('href');
var vTitle = $(this).attr('title');
$('#spnTitle').html('' + vTitle + '');
$('#spnURL').html('' + vhref + '');
});​

หรือหากคุณต้องการใช้ฟังก์ชั่น php คุณจะต้องได้รับ ID นอกวง


1
ขออภัยนี่ไม่ใช่สิ่งที่ฉันขอ ... + the_permalink()ไม่ต้องการรหัสเมื่อเรียกว่าภายในลูป
René Schubert

2
คำตอบนี้มีน้อยมากที่จะทำกับคำถามเดิม ไม่ตอบอย่างถูกต้องและไม่ได้ให้ข้อมูลที่มีค่าเกี่ยวกับหัวข้อ
jounileander

-2

คุณสามารถใช้ฟังก์ชัน wordpress เพื่อรับ URL หน้าปัจจุบัน

the_permalink()

สิ่งนี้จะส่งคืนลิงค์ URL หน้า curremt ให้คุณ


4
เกือบ; the_permalink()จะพิมพ์ URL ของโพสต์ปัจจุบัน แต่มันจะไม่ทำงานสำหรับคำขออื่น ๆ และจะไม่รวมตัวแปรเช่นเลขหน้า ดังนั้นไม่จริงคำตอบ @ René Schubert กำลังมองหา
TheDeadMedic
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.