2016-02-08 3 views
2

Мне нужно включить внешний php-файл только на домашнюю страницу моего сайта.PHP включен только на домашнюю страницу

Но, поскольку все страницы сайта используют один и тот же шаблон страницы (шаблон главной страницы), я не могу их фильтровать на основе этого, поэтому мне было интересно, есть ли способ включить PHP-файл ТОЛЬКО на URL-адрес домашней страницы (который является www .domain.com/folder), а не показывать его на любой другой странице (например, www.domain.com/folder/lorem).

Я попытался использовать этот фрагмент в моем файле header.php:

<?php 
    if ($_SERVER['PHP_SELF'] = '/') 
    include('some-file.php'); 
?> 

и файл будет включен на всех остальных страницах, а также.

Я PHP новичку очень жаль, если это глупый вопрос :)

UPDATE: я изменил его на

<?php 
    if ($_SERVER['PHP_SELF'] == '/') 
    include('some-file.php'); 
?> 

и еще разве показ.

+1

изменения = к == для Comparision –

+0

Приведи в мой код ниже. – Panda

+0

Обновленный ответ с дополнительным методом – Panda

ответ

4

Функцию WordPress is_front_page() можно проверить.

Таким образом, ваш код должен быть:

<?php 

    // if code does not work, adding the next line should make it work 
    <?php wp_reset_query(); ?> 

    if (is_front_page()) { 
    include('some-file.php'); 
} 

?> 

Источник: https://codex.wordpress.org/Function_Reference/is_front_page

В качестве альтернативы, если выше не работает, вы можете попробовать:

if ($_SERVER["REQUEST_URI"] == '/') { 
    include('some-file.php'); 
} 

В крайнем случае, попробуйте использовать плагины для вставки PHP непосредственно на страницы, один такой плагин - https://wordpress.org/plugins/insert-php/.

ОБНОВЛЕНИЕ: После разработки комментариев мы предложили альтернативный метод, как показано ниже.

В вашем случае это может сработать. Этот код сначала получит URL, затем проанализирует его, чтобы получить каталог, и назначьте каталог $directory. Если он находится на домашней странице, то $directory не будет установлен, поэтому включите some-file.php.

<?php 

    // Get URL 
    $link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; 

    // Get Directory (eg. will return 'folder' in example.com/folder/files) 
    $parts = explode('/', $link); 
    $directory = $parts[3]; 

    // If $directory is null, include PHP (eg. example.com, there is no directory) 
    if ($directory == ''){ 
     include('some-file.php'); 
    } 

?> 

Надеемся, что эти методы помогут, спасибо!

+0

я сделал, но ничего не получаю отображается (на домашней странице или на других страницах). если я оставлю его только с «=», он будет показан везде –

+0

@nevenstepar Обновленный код – Panda

+0

Я обновил код еще раз, чтобы он вернул true, независимо от того, является ли первая страница статической страницей или индексом постов блога. Первоначально я использовал 'is_home()', но он только вернул бы истину в индекс сообщений блога. – Panda

0

if -statements всегда ломается к true или false, один = является уступка

Ваших ошибочных результатов в высказывании $_SERVER['PHP_SELF'] IS '/' и, следовательно, верно.

Для сравнения используйте == или ===.

+0

я сделал, но ничего не отображается (на домашней странице или на других страницах). если я оставлю его только с «=», он будет показан везде –

+0

попробуйте посмотреть, что '$ _SERVER ['PHP_SELF']' на самом деле ('echo $ _SERVER ['PHP_SELF']; die;') – Soundz

2

Там есть несколько вопросов, с кодом:

<?php 
    if ($_SERVER['PHP_SELF'] = '/') 
    include('some-file.php'); 
?> 

Как уже упоминалось ваше сравнение (==) не работает, как вы на самом деле с помощью присваивания (=).

Во-вторых, супер глобальная переменная $_SERVER['PHP_SELF'] никогда не будет содержать только / в этой переменной будет содержать путь и имя файла в файл, который выполняется в данный момент, как указано в documentation.

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

<?php 
    if (basename($_SERVER['PHP_SELF']) == 'index.php') 
    include('some-file.php'); 
?> 

Конечно, это не будет работать, как и ожидалось, если у вас есть несколько index.php файлы в отдельных каталогах.

+0

Я полностью игнорирую d тег 'wordpress'. Ответ @luweiqi пришел с работой для вашей установки. Мой ответ просто решает проблемы в вашем коде. – Repox

0

От: http://php.net/manual/en/reserved.variables.server.php

«PATH_INFO», вероятно, что вы хотите использовать:

Содержит любое клиентское предоставленный имя пути информацию трейлинг фактического сценария имя файла, но предшествующую строку запроса, если таковые имеются. Например, если текущий скрипт был доступен через URL http://www.example.com/php/path_info.php/some/stuff?foo=bar, тогда $ _SERVER ['PATH_INFO'] будет содержать/some/stuff.

0

Для каждой страницы WordPress есть идентификатор Так вы это условие можно записать на основе кода так (1) Пожалуйста, найти свой домашний идентификатор страницы

если 2 ваша домашняя страница идентификатор затем написать следующий код шаблон файла после заголовка

<?php 
    if (get_the_ID() == 2) 
    include('some-file.php'); 
?> 

для того чтобы знать детали о get_the_ID() читать эту https://developer.wordpress.org/reference/functions/get_the_ID/

+0

Я пробовал это, но я использую какой-то странный плагин каталога, и все страницы используют один и тот же шаблон страницы (page-homepage.php) с тем же идентификатором, поэтому он отображается на всех страницах. –

+0

Вы проверяете все свои страницы? такой же идентификатор? – Ram

+0

yep, тот же шаблон страницы и тот же ID -.- –

0

использование is_front_page() в вашей условна. Это возвращает true, когда вы находитесь на странице, которую вы назначили главной страницей. Не используйте is_home(). Это возвращает страницу архива блога.

Я знаю ... смущает право? Но это WordPress для тебя.

+0

Я пробовал это (первое, что мне нужно), но я использую какой-то странный плагин каталога, и все страницы используют один и тот же шаблон страницы (page-homepage.php), поэтому он отображается на всех страницах –

+0

@nevenstepar Это не имеет значения. В настройках администратора WordPress вы можете установить, какая страница является главной страницей. Это то, что проверяет функция. –

0
  1. Вы должны изменить свой include include_once, поэтому файл будет включен только один раз.
  2. $ _SERVER ['PHP_SELF'] Сравнение с '/' не имеет смысла. Вместо «/» попробуйте использовать путь к вашему индексному файлу. Другим способом было бы использовать константу __FILE__, но это будет работать только на среде

    <?php 
        if ($_SERVER['PHP_SELF'] == '/index.php'){ 
         include_once('some-file.php'); 
        } 
    ?>