如何仅在主题激活或停用上刷新规则?

时间:2010-10-21 作者:jnthnclrk

刷新规则显然是使用自定义帖子类型创建主题的重要部分。看见herehere.

有没有人有关于如何从函数中刷新规则的示例代码。php?

我有点惊讶,抄本的自定义帖子类型页面中没有包括这一点。

更新:我尝试将其添加到函数中。php,但它不起作用:

register_deactivation_hook( __FILE__, array(&$this,\'deactivate\' ) );
function deactivate() {
 global $wp_rewrite;
 $wp_rewrite->flush_rules();
}

5 个回复
最合适的回答,由SO网友:Johannes Pille 整理而成

虽然这里提供的解决方案仍然有效,但WordPress从那以后一直在发展,现在(我相信是从3.3开始)为主题激活提供了直接挂钩。

after_switch_theme 将在主题激活和switch_theme 在停用旧主题之前。

因此,最新的答案是:

function reflush_rules() {
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
}
add_action( \'after_switch_theme\', \'reflush_rules\' );

SO网友:bangbambang

此代码(取自Ozh\'s comment here 添加少量)可能会对您有所帮助。

function reflush_rules() {
  if ( is_admin() && isset($_GET[\'activated\'] ) && $pagenow == "themes.php" ) {
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
  }
}
add_action(\'init\', \'reflush_rules\');

edit:

将此功能添加到functions.php. 此功能仅在主题激活时加载(仅在$_GET[\'activated\'] 已设置)。

SO网友:EAMann

不确定停用时是否刷新,但激活非常容易。

在您的functions.php 文件中,设置一些代码,如下所示:

function flush_rules_on_activation() {  
    global $wp_rewrite;
    $is_installed = get_option(\'theme_installed\');
    if(!$is_installed) {
        $wp_rewrite->flush_rules();
        add_option(\'theme_installed\', true);
    }
}
add_action(\'init\', \'flush_rules_on_activation\');
这将每次运行,但只刷新一次规则,因为您在选项表中设置了一个标志,以防止每次刷新规则。

SO网友:jnthnclrk

我不得不修改bangbambang的答案,以使其生效。

代码应为:

add_action(\'init\', \'reflush_rules\');
function reflush_rules() {
$pagenow = $_SERVER[\'SCRIPT_NAME\'];
if ( is_admin() && isset($_GET[\'activated\'] ) && $pagenow == "/wp-admin/themes.php" ) {
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
}
}

SO网友:jnthnclrk

实际可行的方法是在register\\u post\\u type之后添加此行:

flush_rewrite_rules( false );

结束

相关推荐