get_template_part('content-form');
を含むheader.php
とfooter.php
の両方に部分ファイルを含めています
ファイルが呼び出されている場所から確認するために使用できるif
句はありますか?それがfooter.php
の中から呼ばれるならば、私はクラス名を追加したいです。
<div class="default-class <?php if (called_from_footer) echo 'footer-class'; ?>">
</div>
よりよい解決策がなければ、私はこれに応じてスタイルを組むことができます、私はただ興味があります:
<div class=footer-container">
<?php get_template_part('content-form') ;?>
</div>
これはあなたの問題に対する true 解決策ではありません(どのテンプレートが別のテンプレートをロードしたかをチェックする)、フッターがロードされたかどうか、つまりパーシャルをロードしているかどうかをテストします。
if ( did_action( 'get_footer' ) ) echo 'footer-class';
これを行うための多くの良い解決策があります、あなたはcjbjがコメントで提供したリンクをたどるべきです。
私はPHPの debug_backtrace()
functionを使うことを提案しています。
function wpse_228223_verify_caller_file( $file_name, $files = array(), $dir = '' ) {
if( empty( $files ) ) {
$files = debug_backtrace();
}
if( ! $dir ) {
$dir = get_stylesheet_directory() . '/';
}
$dir = str_replace( "/", "\\", $dir );
$caller_theme_file = array();
foreach( $files as $file ) {
if( false !== mb_strpos($file['file'], $dir) ) {
$caller_theme_file[] = $file['file'];
}
}
if( $file_name ) {
return in_array( $dir . $file_name, $caller_theme_file );
}
return;
}
使用法:
content-form
テンプレートで、最初のパラメータにファイル名を渡します。
echo var_dump( wpse_228223_verify_caller_file( 'header.php' ) ); // called from header
echo var_dump( wpse_228223_verify_caller_file( 'footer.php' ) ); // called from footer
テンプレートに適切なクラス名を追加することができます。
最初にいくつかテストしてください。私はそれをテストした方法それはうまくいきました。あなたがあなたがそれを呼ばない限りデフォルトで呼ばれないあなた自身のカスタムテンプレートを作成しているので、それはうまく動くはずです。
正直なところ、私はあなたの特定の問題に対する最善の解決策は 1つの形式 @TheDeadMedic であると思います。
do_action('get_footer')
はどのファイルでも実行できるので、少し「壊れやすい」かもしれません...しかし、WordPressで壊れやすいものは何もありませんか?
単に「学術的目的」のための別の解決策はPHP get_included_files()
を使うことですfooter.php
が必要であることをチェックすること:
function themeFileRequired($file) {
$paths = array(
wp_normalize_path(get_stylesheet_directory().'/'.$file.'.php'),
wp_normalize_path(get_template_directory().'/'.$file.'.php'),
);
$included = array_map('wp_normalize_path', get_included_files());
$intersect = array_intersect($paths, $included);
return ! empty($intersect);
}
その後:
<div class="default-class <?= if (themeFileRequired('footer') echo 'footer-class'; ?>">
</div>
本当に汚くしたくない場合は、グローバル変数を使用してください(ちょっと、WPがいつもやっているので、どうしますか。電話の前にそれをセットして、後でそれを読んでください。このような:
functions.php
:global $contentform_Origin = '';
header.php
:$contentform_Origin = 'header'; get_template_part('content-form');
footer.php
:$contentform_Origin = 'footer'; get_template_part('content-form');
content-form.php
:<div class="default-class <?php echo $contentform_Origin ?>-class"> </div>
各phpファイルの先頭に$contentform_Origin
を宣言することを忘れないでください。