こんにちは私は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' );
あなたがプレビューの変化を見ることができない可能性が高い理由はあなたの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
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_template
やarchive_template
のような他のフィルタがあります。もっと詳しい情報はCodex http://codex.wordpress.org/Plugin_API/Filter_Reference/template_include にあります。
'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
)
)