How to set permalink structure via functions.php

I’m setting up a WordPress Network and wanted all new sites to have the same permalink structure (i.e. “/%year%/%monthnum%/%postname%/”). I’m wondering if this is possible to do via hooks or hacks in functions.php, without having to rely on users to choose that structure.

Related posts

Leave a Reply

3 comments

  1. You can set the permalink structure by calling on the set_permalink_structure() method of the global $wp_rewrite object.

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

    Here’s a PHP < 5.3 version of the code in case you’re getting errors.

    function reset_permalinks() {
        global $wp_rewrite;
        $wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
    }
    add_action( 'init', 'reset_permalinks' );
    
  2. Previous Answer is not working. I have gotten a pure solution. Can use
    Use this code. It will work 100%. Thanks

    /**
     * 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' );
    
  3. 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();