jnthnclrk
  • 0
Учитель

Как сбросить правила только для активации или деактивации темы?

  • 0

Сброс правил, безусловно, является важной частью создания тем с пользовательскими типами сообщений. Смотрите здесь и здесь.

У кого-нибудь есть пример кода, как сбросить правила из functions.php?

Я немного удивлен, что это не описано на страницах пользовательских типов сообщений Кодекса.

Обновление: я попытался добавить это в functions.php, но это не сработало:

register_deactivation_hook( __FILE__, array(&$this,'deactivate' ) );
function deactivate() {
 global $wp_rewrite;
 $wp_rewrite->flush_rules();
}
Share
  1. Хотя решения, представленные здесь, все еще работают, 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' );
    
    • 0
  2. этот код (взятый из комментария Ожа здесь с небольшим дополнением) может вам помочь.

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

    редактировать:

    добавьте эту функцию в свой functions.php . Эта функция будет загружаться только при активации темы (установлено только время $_GET['activated'] ).

    • 0
  3. Не уверен насчет сброса при деактивации, но активация довольно проста.

    В вашем 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');
    

    Это будет выполняться каждый раз, но правила будут сбрасываться только один раз, потому что вы установили флаг в своей таблице параметров, чтобы предотвратить их сбрасывание каждый раз.

    • 0
  4. Мне пришлось изменить ответ 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();
    }
    }
    
    • 0
  5. Что действительно работает, так это добавление этой строки после register_post_type:

    flush_rewrite_rules( false );
    
    • 0

Оставить ответ

You must login to add an answer.