回答:
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' );
$wp_rewrite->flush_rules();
して問題を解決します。initで使用して毎回実行するのは悪い習慣です。パーマリンクページにアクセスするだけでトリックが行われます。
以前の回答が機能していません。私は純粋な解決策を得ました。このコードを使用できます。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' );
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();