ต้องการเปลี่ยน permalink product name ใน woocommerce เป็น product id แทน

  • 0 replies
  • 1453 views
ตอนแรกก็ไม่เข้าใจ

ที่ต้องการคือเปลี่ยน permalinks บน wordpress ของ woocommerce จากเดิมเช่น 123.com/product/product_name ให้เป็น Product ID แบบ 123.com/product/456 จะต้องเข้าไปแก้ตรงไหน

หาข้อมูลแล้วก็ได้ตามนี้

ใน WordPress, permalink สำหรับสินค้าแสดงถึงลิงก์ URL ของหน้าสินค้าที่สร้างขึ้นในเว็บไซต์ของคุณ โดยปกติแล้ว permalink จะสร้างจากส่วนหลังของชื่อสินค้า แต่หากคุณต้องการเปลี่ยน permalink เพื่อให้ใช้เลขประจำตัวสินค้า (Product ID) แทนชื่อสินค้า คุณสามารถทำได้โดยการปรับแก้ง่าย ๆ ในการตั้งค่า permalink ของเว็บไซต์ของคุณ ดังนี้:

  • เข้าสู่ระบบ WordPress ของคุณเป็นผู้ดูแลระบบ (admin).
  • เมื่อเข้าสู่ระบบแล้ว ไปที่เมนู "Settings" (การตั้งค่า) และคลิกที่ "Permalinks" (ลิงก์ถาวร).
  • ในหน้า "Permalink Settings" (การตั้งค่าลิงก์ถาวร), คุณจะเห็นตัวเลือกสำหรับโครงสร้างลิงก์ของเนื้อหาต่าง ๆ ในเว็บไซต์ของคุณ.
  • เลือก "Custom Structure" (โครงสร้างกำหนดเอง) และใส่โครงสร้างลิงก์ที่คุณต้องการใช้. ตัวเลือกที่คุณต้องการจะมีค่าดังนี้: /%post_id%/ (เมื่อคุณใช้เลขประจำตัวสินค้าเป็น Post ID).
  • คลิกที่ปุ่ม "Save Changes" (บันทึกการเปลี่ยนแปลง).

ทำแบบนี้เพียงเท่านี้ ลิงก์ URL สำหรับสินค้าในเว็บไซต์ของคุณจะเปลี่ยนจากการใช้ชื่อสินค้าเป็นการใช้เลขประจำตัวสินค้า (Product ID) แทน ตัวอย่างเช่นถ้าสินค้ามี ID เท่ากับ 456, ลิงก์ URL จะเป็นดังนี้: https://123.com/456/.

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

-----------------------

แต่พอทำจริง กลับไม่ได้ ยังเหมือนเดิม แต่เปิด post ก็เป็น url ของ id แล้ว แต่หน้า product ยังไม่ถูกแก้ไข เขาบอกให้เพิ่ม code ใน functions.php ด้วยตัวนี้

หากคุณต้องการแก้ไข permalinks ของหน้าสินค้าแบบที่ระบุเป็น "products/product_name" เพื่อเปลี่ยนเป็น "product_id" แทน คุณสามารถใช้การเข้าถึงฟังก์ชัน rewrite_rules_array และ add_rewrite_rule ใน WordPress เพื่อสร้างการตั้งค่าลิงก์ถาวรที่คุณต้องการ. ตามนี้คือตัวอย่างของการใช้ hook ในการแก้ไข permalinks:

-----------------------
function custom_rewrite_rules() {
    add_rewrite_rule(
        '^products/([^/]+)/?$',
        'index.php?product_id=$matches[1]',
        'top'
    );
}
add_action('init', 'custom_rewrite_rules');


-----------------------
ก็ยังไม่ได้ สุดท้ายมาจบที่ code ตัวนี้ กับ woocommerce

-----------------------

function custom_product_permalink( $permalink, $post ) {
    // ตรวจสอบว่าเป็นหน้าสินค้าของ WooCommerce
    if ( is_wc_endpoint_url() || ! is_object( $post ) || 'product' !== $post->post_type ) {
        return $permalink;
    }

    // ใช้ Product ID แทนชื่อสินค้าใน URL
    $product_id = $post->ID;
    $new_permalink = home_url( "/$product_id/" );

    return $new_permalink;
}
add_filter( 'post_type_link', 'custom_product_permalink', 10, 2 );