PHP включать только в URL домашней страницы

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

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

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

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

и этот файл также включается на все остальные страницы.

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

ОБНОВЛЕНИЕ: я изменил его на

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

и до сих пор не появляется.


person neven stepar    schedule 08.02.2016    source источник
comment
изменить = на == для сравнения   -  person Chetan Ameta    schedule 08.02.2016
comment
Обратитесь к моему коду ниже.   -  person Panda    schedule 08.02.2016
comment
Обновленный ответ с дополнительным методом   -  person Panda    schedule 08.02.2016


Ответы (7)


Вы можете использовать функцию 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');
   }

?>

Надеюсь, вышеперечисленные методы помогут, спасибо!

person Panda    schedule 08.02.2016
comment
я сделал, но ничего не отображается (на домашней странице или на любых других страницах). если я оставлю его только = он будет отображаться везде - person neven stepar; 08.02.2016
comment
Я снова обновил код, чтобы он возвращал true независимо от того, является ли главная страница статической страницей или индексом сообщений в блоге. Первоначально я использовал is_home(), но он возвращал true только в индексе сообщений блога. - person Panda; 08.02.2016
comment
Это будет работать отлично, но все мои страницы используют один и тот же шаблон страницы (page-homepage.php). Плагин, который я использую, использует этот шаблон для отображения контента, поэтому он отображается на всех страницах --- - person neven stepar; 08.02.2016
comment
@nevenstepar Вы пробовали и is_home(), и is_front_page()? - person Panda; 08.02.2016
comment
Да, я это сделал :( Это ошибка этих проклятых плагинов, все отображается на одной странице (класс тела - домашняя страница, идентификатор страницы-5, страница-шаблон, страница-шаблон-страница-домашняя страница) - person neven stepar; 08.02.2016
comment
@nevenstepar Попробуйте wp_reset_query(); $thispage = $post->ID; if ( $thispage < 1 ) - person Panda; 08.02.2016
comment
@nevenstepar if ( $_SERVER["REQUEST_URI"] == '/' ) {include('some-file.php'); } Это может сработать - person Panda; 08.02.2016
comment
Этот последний не работает, но тот, что был раньше, я не знаю, как настроить: D, должен ли он войти внутрь оператора if или... - person neven stepar; 08.02.2016
comment
@nevemstepar Должно быть wp_reset_query(); $thispage = $post->ID; if ( $thispage < 1 ) include('some-file.php'); - person Panda; 08.02.2016
comment
Черт, нет :( Я использую это в header.php, может быть проблема в этом... или нет... И я действительно извиняюсь за то, что утомил вас - person neven stepar; 08.02.2016
comment
@nevenstepar Эту функцию можно использовать в header.php, page.php или footer.php. Может быть, попробовать последние 2 файла? - person Panda; 08.02.2016
comment
@nevenstepar Если код действительно не работает, используйте плагин, такой как wordpress.org/plugins/insert -php может помочь :) - person Panda; 08.02.2016
comment
я знаю, но если я прав, это рекламируется только в области содержимого страницы, и мне нужно это в заголовке: D - person neven stepar; 08.02.2016
comment
@nevenstepar Вы пытались добавить <?php wp_reset_query(); ?> перед кодом is_front_page()? - person Panda; 08.02.2016
comment
Я сделал :( Итак, есть только одна страница под названием «Домашняя страница», и она использует шаблон домашней страницы. Внутри этой страницы у меня есть шорткод для каталога продуктов, который отображает категории и продукты. Когда пользователь нажимает на ссылку продукта, он отображается, но с использованием тот же шаблон страницы. Плагин, конечно, не имеет никаких дополнительных параметров, поэтому я могу выбрать шаблон -.- URL-адрес страницы выглядит как www.domain.com/folder.Но, когда продукт открыт, ссылки на страницы выглядят как www.domain .com/folder/product/product-name Можно ли включить его для всех страниц, а затем удалить для всех страниц /product?Опять же, новичок в php :( - person neven stepar; 08.02.2016
comment
@nevenstepar Добавил еще один метод, скорее всего сработает, спасибо :) - person Panda; 08.02.2016

Есть пара проблем с вашим кодом:

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

Как уже упоминалось, ваше сравнение (==) не работает, поскольку вы фактически используете присваивание (=).

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

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

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

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

person Repox    schedule 08.02.2016
comment
Я полностью проигнорировал тег wordpress. Ответ, который пришел @luweiqi, подойдет для вашей установки. Мой ответ просто решает проблемы в вашем коде. - person Repox; 08.02.2016

if-операторы всегда разбиваются на true или false, один = является присваиванием

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

Вы должны использовать == для сравнения или === для сравнения типов.

person Soundz    schedule 08.02.2016
comment
я сделал, но ничего не отображается (на домашней странице или на любых других страницах). если я оставлю его только = он будет отображаться везде - person neven stepar; 08.02.2016
comment
попробуй посмотреть, что такое $_SERVER['PHP_SELF'] на самом деле (echo $_SERVER['PHP_SELF'];die;) - person Soundz; 08.02.2016

Откуда: 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.

person Paul Dunlop    schedule 08.02.2016

Для каждой страницы 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/

person Ram    schedule 08.02.2016
comment
Я пробовал это, но я использую какой-то странный плагин каталога, и все страницы используют один и тот же шаблон страницы (page-homepage.php) с одним и тем же идентификатором, поэтому он отображается на всех страницах. - person neven stepar; 08.02.2016
comment
Вы проверяете все свои страницы? У них одинаковый идентификатор? - person Ram; 08.02.2016
comment
да, тот же шаблон страницы и тот же идентификатор -.- - person neven stepar; 08.02.2016
comment
не могли бы вы прикрепить скриншот URL с вопросом, тогда каждый сможет легко понять ситуацию. не забудьте скрыть свое доменное имя - person Ram; 08.02.2016

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

Я знаю... сбивает с толку, верно? Но это WordPress для вас.

person James Jones    schedule 08.02.2016
comment
Я пробовал это (первое), но я использую какой-то странный плагин каталога, и все страницы используют один и тот же шаблон страницы (page-homepage.php), поэтому он отображается на всех страницах. - person neven stepar; 08.02.2016
comment
@nevenstepar Это не должно иметь значения. В настройках администратора WordPress вы можете указать, какая страница будет главной. Это то, что проверяет функция. - person James Jones; 08.02.2016

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

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