it-swarm-ja.com

どのフックから条件付きでアクションを追加することが可能ですか?

サイドバーをデザインで使用するかどうかを示すテーマオプション配列からの変数に基づいて、 "init"フックにサイドバーを登録しようとしました。

今、それは条件がうまくいくように見えますが(他のコードでテストされています)

add_action( 'init', 'register_sidebar_x' );またはadd_action( 'wp_loaded', 'register_sidebar_x' );

条件が真であることに基づいて、何も起こらず、サイドバーは登録されませんが、どちらかのフックを使用してコントロール構造の外側のコードを使用して登録されます。

そのため、functions.phpがtheme options配列(これは含まれています)にアクセスする前にinit関数が実行されるようです。たとえば、制御構造は "wp_head"で機能します。

だから私の質問は - どのようなフックから条件付きを使用することが可能であり、それ以降のサイドバーを登録するために使用できるものはありますか?

更新:

OK、これが下からいくつかの提案を取り入れようとしている現在のコードです...サイドバーは私がその状態をテストしていなければ問題なく登録されていますが、その状態は明らかに 'yes'です。サイドバーを条件付きで登録する方法はありますか?

add_action( 'after_setup_theme', 'aad_theme_setup' );

function aad_theme_setup() {

    if ( function_exists( 'get_option_tree') ) {
        $theme_options = get_option('option_tree');
    }

    if ($theme_options['aad_sliding_sidebar']=='yes') {
        add_action( 'widgets-init', 'aad_register_sidebar_function' );  
    }
}

それでもまだ動作しません...追加の提案をありがとう!

1
user2789

私はコーデックスでこれを見つけました

WordPressのinitアクションフック以降にのみ条件付きクエリタグを使用できます。テーマの場合、これはfunctions.phpの本体、つまり関数の外側でコンディショナルタグを使用している場合、コンディショナルタグが正しく機能しないことを意味します。

更新

サイドバーの登録機能をフックする必要はありません。

add_action( 'after_setup_theme', 'aad_theme_setup' );

function aad_theme_setup() {

    if ( function_exists( 'get_option_tree') ) {
        $theme_options = get_option('option_tree');
    }
get_option_tree
    if ($theme_options['aad_sliding_sidebar']=='yes') {
        aad_register_sidebar_function();
    }
}

しかし、 "get_option_tree"関数が存在するかどうかをチェックしているのに "add_register_sidebar_function()"の代わりに "aad_register_sidebar_function()"を呼び出しているのかもしれません。 "two" aa "ではなく" two "dd"?

1
Bainternet

after_setup_themeフックは非常に早い段階で(functions.phpファイルを見つけてインクルードした直後に)呼ばれるので、あなたはそのフックでget_optionを使うことができるはずです。

ただし、initregister_sidebarsの前に呼び出されるため、その時点でサイドバーを登録できないのはよくわかりません。あなたはオプション表をチェックするために何を使っていますか?それは単純なget_option関数なのか、それとも自動ロードオプションに頼っているのか?

0
goldenapples