วิธีการเปลี่ยนเส้นทางผู้ใช้ที่ไม่ได้เข้าสู่ระบบไปยังหน้าเฉพาะ?


16

วิธีเปลี่ยนเส้นทางผู้ใช้ที่ไม่ได้เข้าสู่ระบบขอหน้า / URL เฉพาะไปยังหน้า / URL อื่นและแสดงข้อความเช่น "สำหรับสมาชิกเท่านั้น" ฉันรู้ว่ามันใช้งานโค้ดได้ง่ายมาก! is_user_logged_in () ฟังก์ชั่น แต่ฉันไม่รู้วิธีเขียนโค้ดเพราะฉันเป็นมือใหม่กับ WordPress สนใจบอกไฟล์ให้ฉันใส่รหัสด้วย

คำตอบ:


30

ต่อไปนี้เป็นตัวอย่าง 2 ประการที่คุณจะต้องแก้ไขเล็กน้อยเพื่อให้ทำงานได้ตามความต้องการเฉพาะของคุณ

add_action( 'admin_init', 'redirect_non_logged_users_to_specific_page' );

function redirect_non_logged_users_to_specific_page() {

if ( !is_user_logged_in() && is_page('add page slug or ID here') && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {

wp_redirect( 'http://www.example.dev/page/' ); 
    exit;
   }
}

วางสิ่งนี้ไว้ในไฟล์ฟังก์ชั่นธีมลูกของคุณเปลี่ยน ID หน้าหรือกระสุนและเปลี่ยนเส้นทาง URL

คุณสามารถใช้รหัสเช่นนี้:

add_action( 'template_redirect', 'redirect_to_specific_page' );

function redirect_to_specific_page() {

if ( is_page('slug') && ! is_user_logged_in() ) {

wp_redirect( 'http://www.example.dev/your-page/', 301 ); 
  exit;
    }
}

คุณสามารถเพิ่มข้อความไปยังหน้าหรือถ้าคุณต้องการที่จะแสดงข้อความที่ไม่ทั้งหมดเข้าสู่ระบบผู้ใช้เพิ่มเข้าไปในรหัส

http://codex.wordpress.org/Function_Reference/wp_redirect


ขอบคุณสำหรับคำตอบที่ฉันทำเช่นนี้add_action('template_redirect', 'redirect_to_specific_page'); function redirect_to_specific_page() { if ( is_page('http://mydomain.com/participate') && !is_user_logged_in()) { wp_redirect('http://mydomain.com/login', 301); exit; } }แต่มันไม่ทำงาน
user3187719

ใช้ id ของหน้าหรือกระสุนที่นี่ไม่ใช่ url mydomain.com/participate codex.wordpress.org/Conditional_Tags
Brad Dalton

is_page ('เข้าร่วม')
แบรดดาลตัน

9

นี่จะดีกว่า:

if ( !is_user_logged_in() ) {
    auth_redirect();
} 

// continue as normal for authenticated users

สิ่งนี้จะเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าเข้าสู่ระบบ เมื่อเข้าสู่ระบบผู้ใช้จะถูกนำกลับไปยังหน้าความปลอดภัยที่พวกเขาพยายามเข้าถึงในตอนแรก

เอกสารที่นี่:

https://codex.wordpress.org/Function_Reference/auth_redirect


4

เราจะบอกคุณได้อย่างไรว่าจะวางที่ใดถ้าคุณไม่ได้บอกเราว่าคุณต้องการแสดงมันที่ไหนและที่ไหน โพสต์ทั้งหมด? หน้า? กำหนดส่วนต่าง ๆ ของหน้า? ขออภัย ... ฉันคิดว่าลูกบอลคริสตัลของฉันวันนี้ไม่ค่อยทำงาน

เมื่อคุณเป็นและฉันพูดคุณ: "มือใหม่เป็น WordPress" คุณควรเรียนรู้มากกว่าที่จะขอคำตอบโดยตรง

สำหรับที่ไหนคุณควรอ่านลิงค์ 1 อ้างอิง นี่จะบอกคุณว่าคุณต้องใส่ไฟล์อะไรลงไป

สำหรับวิธีการการทำคุณควรอ่านลิงค์อ้างอิง 2 และ 3 ก่อน

โดยรวมแล้วควรมีหน้าตาดังนี้:

if ( is_user_logged_in() ) {
    the_content();
} else {
    echo 'For members only';
}

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

  1. เทมเพลตลำดับชั้น
  2. แท็กเงื่อนไข
  3. วง

เพิ่มหลังจากความคิดเห็นด้านล่าง:

หากต้องการเปลี่ยนเส้นทางใช้headerกับwp_login_url- อีกครั้งให้ตรวจสอบข้อมูลอ้างอิง 1 และ 2 ด้านล่าง:

if ( is_user_logged_in() ) {
    the_content();
} else {
    header('Location: ' . wp_login_url());
}

อ้างอิง:

  1. ส่วนหัว - PHP
  2. wp_login_url

อันที่จริงฉันไม่ทราบว่าฟังก์ชั่นเกี่ยวกับ wordpress ที่ส่งกลับ URL ที่ร้องขอหรือ Permalink และเกี่ยวกับข้อความ dispaly ทิ้งไว้ฉันต้องการเพียงแค่เปลี่ยนเส้นทางพวกเขาเมื่อพวกเขาร้องขอ URL ที่แน่นอนโดยไม่ถูกบันทึก
user3187719

ฉันสามารถทำได้ด้วย $ pagenow
user3187719

@ user3187719 แก้ไขคำตอบเดิมของฉันและเพิ่มโซลูชันเพื่อเปลี่ยนเส้นทาง PS $pagenow? คุณกำลังพยายามที่จะฆ่าแมลงวันด้วยปืนใหญ่แน่ใจว่ามันจะทำงาน แต่ทำไมซับซ้อน? ง่าย ๆ เข้าไว้. PS2: เรียนรู้ PHP และ WP Codex
Borek

4

คุณไม่สามารถเปลี่ยนเส้นทางไปยังหน้าใดหน้าหนึ่งได้ แต่ผู้ใช้ที่ไม่ได้ลงชื่อเข้าใช้จะถูกเปลี่ยนเส้นทางไปยังหน้าจอเข้าสู่ระบบ

<?php auth_redirect(); ?>

Wordpress อ้างอิง: auth_redirect()

เพียงพูดถึงวิธีอื่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.