ทำให้หน้า WooCommerce สามารถเข้าถึงได้สำหรับผู้ใช้ที่เข้าสู่ระบบเท่านั้น


12

ฉันมีเว็บไซต์ที่ใช้ WordPress และอีคอมเมิร์ซโดยใช้ WooCommerce ฉันต้องการให้ร้านค้าของฉัน (และหน้าทั้งหมดของมัน) ถูกมองเห็นโดยผู้ใช้ที่ล็อกอินเท่านั้น

ผ่านปลั๊กอินตัวจัดการการเข้าถึงของผู้ใช้ฉันได้ปฏิเสธการเข้าถึงหน้าร้าน แต่ด้วยการเชื่อมโยงโดยตรงไปยังผลิตภัณฑ์ ฯลฯ เราสามารถเข้าถึงหน้านั้นได้อย่างไรก็ตามแม้ว่าผู้ใช้จะไม่ได้เข้าสู่ระบบ

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

คำตอบ:


24

ใส่ไว้ในfunctions.phpไฟล์ของคุณ:

function wpse_131562_redirect() {
    if (
        ! is_user_logged_in()
        && (is_woocommerce() || is_cart() || is_checkout())
    ) {
        // feel free to customize the following line to suit your needs
        wp_redirect(home_url());
        exit;
    }
}
add_action('template_redirect', 'wpse_131562_redirect');

มันทำอะไร?
เราตรวจสอบว่าผู้ใช้ที่ไม่ได้เข้าสู่ระบบต้องการที่จะเห็นหน้า WooCommerce และเปลี่ยนเส้นทางเขา / เธอไปที่หน้าแรกของเรา


ขอขอบคุณสำหรับความช่วยเหลือของคุณ. ไฟล์ functions.php อยู่ในโฟลเดอร์ธีมของฉันหรือไม่? และฉันจะจำฟังก์ชันนี้จากหน้าผลิตภัณฑ์ได้อย่างไร ขอบคุณ :-)
Alessandro

ขอบคุณมาก. รหัสของคุณใช้งานได้ดีสำหรับฉัน ขอบคุณมาก ๆ :)
อเลสซานโดร

1
ตรวจสอบให้แน่ใจว่าคุณไม่ได้ตั้งหน้า woocommerce เป็นหน้าแรกของคุณเพราะเว็บไซต์จะไม่ทำงานอีกต่อไป
SPRBRN

7

ฉันเพิ่งเปลี่ยนเส้นทางไป

wp_redirect( site_url('my-account/') )

ดังนั้นผู้ใช้จะถูกเปลี่ยนเส้นทางในหน้า "บัญชีของฉัน" หากไม่ได้เข้าสู่ระบบหรือลงทะเบียน


2
นี่ไม่ใช่วิธีที่ดีที่สุดในการเปลี่ยนเส้นทางไปยังMy Accountหน้า เป็นการดีกว่าที่จะดึงลิงก์ Permalink ของหน้าบัญชีของฉันที่คุณเชื่อมโยงในการตั้งค่า WooCommerce ของคุณ วิธีนี้เมื่อใดก็ตามที่มีการเปลี่ยนแปลง Permalink หรือคุณมีเว็บไซต์หลายภาษาที่ใช้งาน Permalink จะยังคงถูกเรียกคืนอย่างถูกต้อง กล่าวโดยย่อ: เป็นการดีกว่าที่จะไม่โค้ดฮาร์ดโค้ดลิงก์ / ตัวบุ้ง (หรือ URL โดยทั่วไป) วิธีที่ดีกว่าน่าจะเป็น:wp_redirect( get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ) );
Rens Tillmann

คุณไม่มีรหัส มันจบ
user889030

0

ฉันจะเปลี่ยนเป็นสิ่งนี้

wp_safe_redirect( wc_get_page_permalink( 'myaccount' ) );

แทน

wp_redirect( site_url('my-account/') );

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