web-dev-qa-db-ja.com

WP リフレッシュ問題をカスタマイズする

こんにちは私はWP Customizeにオプションを追加しています。

ほとんどすべてうまくいきますが、私の変数の1つはプレビューウィンドウで更新されません。

$wp_customize->add_setting('checkbox', array(
        'capability' => 'edit_theme_options',
        'default' => false,
    ));

$wp_customize->add_control('checkbox_control', array(
    'settings' => 'checkbox',
    'label'    => __('Activate Coming Soon Page', 'ln'),
    'section'  => 'general_settings',
    'type'     => 'checkbox',
    'priority' => 1,
));

これが私がチェックボックスを追加する方法で、これがfunctions.phpの私のチェックです。

function template_redirect() {
 if(true == get_theme_mod('checkbox')) {
        include (TEMPLATEPATH . '/coming-soon.php');
        exit;
    }
}
add_action( 'template_redirect', 'template_redirect' );

だからすべてうまくいく。 〜唯一の問題はWPプレビューウィンドウがカスタマイズされチェックボックスをクリックするとページがリロードされますが変更は表示されないことです。 [保存]をクリックして手動で更新した場合は、すべて問題ありません。

この問題を解決するための提案はありますか?

ありがとうございました

更新:

WP CUSTOMIZERを壊しているものが見つかりました。リダイレクトの出口です。この問題を解決する他の方法はありますか。チェックボックスがTRUEの場合はそのページにリダイレクトする必要があります

 function template_redirect() {
     if(true == get_theme_mod('checkbox')) {
            include (TEMPLATEPATH . '/coming-soon.php');
            exit;  !!!!!!!!!!!!!!!!!
        }
    }
    add_action( 'template_redirect', 'template_redirect' );
1
user43506

あなたがプレビューの変化を見ることができない可能性が高い理由はあなたのcoming-soon.phpテンプレートが行われる必要なwp_head()wp_footer()呼び出しを含んでいないことです。あなたのブラウザのDOMを見れば、二番目のiframeが目に見えるiframeの後ろに作成されていることを実際に見るべきです。ただし、テンプレートに標準のテーマフックが含まれていない場合、customize-preview.jsスクリプトはキューに入れられず、iframeが読み込まれたことを親ウィンドウに通知できないため、前のiframeを置き換えることができます。

#37981 :[template_includeがカスタマイザプレビューアで機能していない]のWP Core Tracに、この同じ質問が実際に報告されています。I 回答

スクリプトが印刷されるように、wp_head()wp_footer()の呼び出しが行われていることを確認する必要があります。 customize-preview.jsが出力されない場合、ロードされたページは、ページのロードが終了したことを親フレームと通信できません。この問題は実際には最近他の場所でも起きています。 https://github.com/Automattic/amp-wp/issues/477#issuecomment-247679386

1
Weston Ruter

Template_redirectにフックされた何か他のものを実行したくない場合にのみ、template_redirectを使用してください。代わりに、代わりのテンプレートを含めるには、template_includeを使用する必要があります。

function ql_template_include( $template ) {
    if ( true == get_theme_mod( 'checkbox' ) ) {
        return TEMPLATEPATH . '/coming-soon.php';
    }
    return $template;
}
add_action( 'template_include', 'ql_template_include' );

single_templatearchive_templateのような他のフィルタがあります。もっと詳しい情報はCodex http://codex.wordpress.org/Plugin_API/Filter_Reference/template_include にあります。

0
Elliot

'transport'を呼び出すときに、$wp_customize->add_settingオプションを明示的に追加しようとしましたか?

例えば.

$wp_customize->add_control('checkbox_control', array(
    'settings' => 'checkbox',
    'label'    => __('Activate Coming Soon Page', 'ln'),
    'section'  => 'general_settings',
    'type'     => 'checkbox',
    'priority' => 1,
    'transport'   => 'refresh'
));

または、フレームワークを使用して、WP Theme Customizerと対話することもできます。たとえば、Slobodan Manic call Customizer Boilerplate による良いものがあります。たとえば、Customizer Boilerplateのチェックボックスを使用するには、Githubからテーマのディレクトリにファイルをダウンロードし、テーマに呼び出しfunctions.phpを含めてCustomizer Boilerplateに含めます(例:require( get_stylesheet_directory() . '/customizer-boilerplate/customizer.php' );options.phpで提供されるオプションを変更して、チェックボックスのみを残すことができます。

                /*
             * ==============
             * ==============
             * Checkbox field
             * ==============
             * ==============
             */
            'new_checkbox_field' => array(
                'setting_args' => array(
                    'default' => true,
                    'type' => 'option',
                    'capability' => $thsp_cbp_capability,
                    'transport' => 'refresh',
                ),                  
                'control_args' => array(
                    'label' => __( 'New checkbox field label', 'my_theme_textdomain' ),
                    'type' => 'checkbox', // Checkbox field control
                    'priority' => 2
                )
            )
0
MBL