如何通过functions.php设置永久链接结构


10

我正在建立一个Wordpress网络,并希望所有新站点都具有相同的永久链接结构(即“ /%year%/%monthnum%/%postname%/”)。我想知道是否可以通过功能或PHP中的钩子或黑客操作来实现,而不必依赖用户来选择该结构。

Answers:


15

您可以通过调用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' );

复制和粘贴代码会产生错误,但是基本原理可以解决问题!我只想知道我的问题/意图是否是好的习惯,但是……
Tomas Buteler

1
Tomas,感谢您接受答案。很高兴为您提供帮助。至于良好的做法-我认为,如果您的目标是在网站上实施和锁定这种永久链接结构-那么,这是合理的;“锁定”是指代码不允许通过Admin对结构进行任何更改,如果可以的话,我认为这样做是完全可以的。
soulseekah

1
它可以工作,但是当管理员从永久链接页面(帖子上的404)进行保存时,会导致冲突。然后,当站点加载时(进程初始化挂钩),永久链接结构再次更改(帖子上再次显示404)。使用$wp_rewrite->flush_rules();解决了问题。在init上使用它并每次运行它的错误做法。只需访问永久链接页面即可完成操作。
西西尔(Sisir)2012年

1
整个目的是禁用永久链接选项页面,所以也许我可以摆脱它?
Tomas Buteler 2012年

3
应该在“ after_switch_theme”或插件激活时调用它,并在其后跟随“ flush_rewrite_rules()”
csstd 2013年

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();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.