วิธีการตั้งค่าโครงสร้างลิงก์ผ่าน function.php


10

ฉันกำลังตั้งค่าเครือข่าย Wordpress และต้องการให้ไซต์ใหม่ทั้งหมดมีโครงสร้าง Permalink แบบเดียวกัน (เช่น "/% ปี% /% เดือนเดือน / เดือน% ชื่อ% /%") ฉันสงสัยว่านี่เป็นไปได้ที่จะทำผ่าน hooks หรือ hacks ใน functions.php โดยไม่ต้องพึ่งพาผู้ใช้ในการเลือกโครงสร้างนั้น

คำตอบ:


15

คุณสามารถกำหนดโครงสร้าง Permalink ได้โดยการเรียกใช้set_permalink_structure()เมธอดของโกลบอล$wp_rewriteออบเจ็กต์

add_action( 'init', function() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
} );

นี่คือโค้ด PHP เวอร์ชัน 5.3 ในกรณีที่คุณได้รับข้อผิดพลาด

function reset_permalinks() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
}
add_action( 'init', 'reset_permalinks' );

การคัดลอกและวางรหัสของคุณสร้างข้อผิดพลาด แต่เหตุผลก็ทำตามเคล็ดลับ! ฉันสงสัยว่าคำถาม / ความตั้งใจของฉันมีการปฏิบัติที่ดี แต่ ...
โทมัส Buteler

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

1
มันใช้งานได้ แต่มันทำให้เกิดข้อขัดแย้งเมื่อผู้ดูแลระบบบันทึกจากหน้าลิงก์ (404 ในโพสต์) จากนั้นเมื่อเว็บไซต์โหลด (ขอเริ่มต้น proccess) โครงสร้างลิงก์จะเปลี่ยนอีกครั้ง (404 ในโพสต์อีกครั้ง) ใช้$wp_rewrite->flush_rules();แก้ปัญหา การฝึกฝนที่ไม่ถูกต้องที่จะใช้กับ init และเรียกใช้ทุกครั้ง เพียงไปที่หน้า Permalinks จะทำเทคนิค
Sisir

1
ความตั้งใจทั้งหมดคือการปิดการใช้งานหน้าตัวเลือกลิงก์ถาวรดังนั้นฉันจะไปด้วยได้ไหม
Tomas Buteler

3
ควรเรียกใช้ใน 'after_switch_theme' หรือในการเปิดใช้งานปลั๊กอินและตามด้วย 'flush_rewrite_rules ()'
csstd

2

คำตอบก่อนหน้านี้ไม่ทำงาน ฉันได้รับทางออกที่บริสุทธิ์แล้ว สามารถใช้ใช้รหัสนี้ มันจะทำงานได้ 100% ขอบคุณ

/**
 * Rewrite set up, when theme activate i mean
 */
if (isset($_GET['activated']) && is_admin()) {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure('/%postname%/');
    $wp_rewrite->flush_rules();
}

/**
* Redirect to Permalink setting Page.
* Otherwise Redirect rule will not work Properly.
*/
function redirect_to_permalink() {

    wp_redirect('options-permalink.php');
}
add_action( 'after_switch_theme', 'redirect_to_permalink' );

0
function setPermaLink(){
    $ps = '/%category%/%postname%/';
    $permalink_structure = sanitize_option( 'permalink_structure', $ps);
    $blog_prefix = '/blog';
    $prefix = '/index.php';

    if ( ! empty( $permalink_structure ) ) {
        $permalink_structure = preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $permalink_structure ) );
        if ( $prefix && $blog_prefix ) {
            $permalink_structure = $prefix . preg_replace( '#^/?index\.php#', '', $permalink_structure );
        } else {
            $permalink_structure = $blog_prefix . $permalink_structure;
        }
    }

    $wp_rewrite->set_permalink_structure( $permalink_structure );
    flush_rewrite_rules();
}

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