2017-06-23 7 views
0

テーマ設定がユーザーによって更新されているときに、私のテーマがCSSファイルを作成します。これは問題なく動作します。WordPress:テーマアップデートがインストールされたときのフック

ここでは、テーマがダッシュボード内から更新されているとき、または自動更新が発生したときにも、CSSファイルを作成する必要があります。

私はこれらの例に基づいてupgrader_process_completeupgrader_post_installに見てきた:https://codex.wordpress.org/Plugin_API/Action_Reference/upgrader_process_completehttps://wordpress.stackexchange.com/questions/215063/limit-filter-upgrader-post-install-to-a-single-pluginが、私はテーマを更新した後、何らかの理由で、私の関数が解雇されていません。

次のコードは私のテーマの私のfunctions.phpにあります。

function create_css_file() { 
    //code to create css file 
} 

function my_upgrade_function($options) { 
    create_css_file(); 
} 
add_action('upgrader_process_complete', my_upgrade_function, 10, 2); 

//I also tried this. No luck 
add_filter('upgrader_post_install', my_upgrade_function, 100, 0); 

何か基本的なものがありませんか?

更新#1: 私はadd_action('upgrader_process_complete', my_upgrade_function, 150); を使用して優先順位を下げてきたが今では動作しているようですが、create_css_file関数が呼び出されたとき、それは新しくインストールされたバージョン以前のバージョンを使用し、ではありません。作成されたCSSファイルをチェックすると、新しく生成されたものですが、古いバージョンに基づいています。なぜこれが起こるかわからない。

また、add_action('upgrader_process_complete', my_upgrade_function, 1);に変更しました - 同じ問題です。新しくインストールされたコードではなく、古いコードが使用されています。

更新#2: オーケー古いテーマがまだインストールされている間、私は両方とも、upgrader_process_completeupgrader_post_installこと、結論に達した、一種の全体の目的に反している、解雇されています。

私はすぐにupgrader_process_completeセクション全体を削除したテストを実行し、私のプライベートリポジトリにアップロードしました。私はその後、テーマに行ってダッシュボードで更新しましたが、upgrader_process_completeは、まだインストールされていたテーマに基づいて、新しくインストールされたCSSファイルを作成しています。しかし、私が言ったように、私は実際にはupgrader_process_completeコードセクション全体を削除したので、最初に解雇すべきではありません。

これは私には、古いテーマがまだインストールされている間にupgrader_process_completeが起動されていると私につながります。

私は正方形に戻ってきます。テーマの更新が正常にインストールされた後、どのように関数を呼び出すのですか?あなたがテーマの失活のオプションを削除する必要があります。もちろん、

add_action('after_setup_theme', 'PREFIX_check_theme_version'); 
function PREFIX_check_theme_version() { 

    $current_version = wp_get_theme()->get('Version'); 
    $old_version = get_option('PREFIX_theme_version'); 

    if ($old_version !== $current_version) { 
    // do some cool stuff 
    create_css_file(); 

    // update not to run twice 
    update_option('PREFIX_theme_version', $current_version); 
    } 
} 

::私はオプションで、テーマのバージョンを保存し、現在のテーマのバージョンに対して、それをチェックすることを決定した同様の問題を持つ

答えて

0

add_action('switch_theme', 'PREFIX_options_removal'); 

function PREFIX_options_removal() { 
    delete_option('PREFIX_theme_version'); 
} 

これはハックですが、仕事を完了します。

関連する問題