web-dev-qa-db-ja.com

部分ファイルがheader.phpまたはfooter.php内から呼び出されているか確認してください

get_template_part('content-form');を含むheader.phpfooter.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>
6
Boris Kozarac

これはあなたの問題に対する true 解決策ではありません(どのテンプレートが別のテンプレートをロードしたかをチェックする)、フッターがロードされたかどうか、つまりパーシャルをロードしているかどうかをテストします。

if ( did_action( 'get_footer' ) ) echo 'footer-class';
5
TheDeadMedic

これを行うための多くの良い解決策があります、あなたは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

テンプレートに適切なクラス名を追加することができます。

最初にいくつかテストしてください。私はそれをテストした方法それはうまくいきました。あなたがあなたがそれを呼ばない限りデフォルトで呼ばれないあなた自身のカスタムテンプレートを作成しているので、それはうまく動くはずです。

2
Samuel Elh

正直なところ、私はあなたの特定の問題に対する最善の解決策は 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>
2
gmazzap

本当に汚くしたくない場合は、グローバル変数を使用してください(ちょっと、WPがいつもやっているので、どうしますか。電話の前にそれをセットして、後でそれを読んでください。このような:

functions.phpglobal $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を宣言することを忘れないでください。

0
cjbj