Проверьте, вызван ли частичный файл из header.php или footer.php

Я включаю в себя частичный файл как в header.php, так и в footer.php с помощью get_template_part('content-form');

Существует ли предложение 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 30 Maypm16 2016, 14:43:53

4 ответа


5

Это не решение true для вашей проблемы (проверка того, какой шаблон загружен другим), но он будет работать, чтобы проверить, был ли загружен нижний колонтитул или нет, и, таким образом, если он загружает частичное:

if ( did_action( 'get_footer' ) ) echo 'footer-class';
ответил TheDeadMedic 30 Maypm16 2016, 16:21:32
2

Есть много хороших решений для этого, вы должны следовать ссылке, которую cjbj предоставил в комментариях.

Я предлагаю использовать PHP debug_backtrace() :

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

, и там, в вашем шаблоне, вы можете добавить соответствующие имена классов.

Пожалуйста, сначала дайте несколько тестов. То, как я тестировал это, отлично работало. Поскольку вы создаете свой собственный шаблон, который не будет вызываться по умолчанию, если вы его не вызвали, он должен работать нормально.

ответил Samuel Elh 30 Maypm16 2016, 16:07:20
2

Честно говоря, я считаю, что лучшим решением для вашей конкретной проблемы является одна форма @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>
ответил gmazzap 30 Maypm16 2016, 22:38:46
0

Если вы действительно хотите, чтобы он был «грязным», просто используйте глобальную переменную (эй, 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>

Не забудьте объявить $contentform_origin в начале каждого файла php.

ответил cjbj 30 Maypm16 2016, 22:12:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132