it-swarm.com.ru

Включить внешний PHP файл в пользовательский шаблон Wordpress

Можно ли включить внешний PHP файл в пользовательский шаблон?

Я пытаюсь добавить блог на свой сайт. У меня уже есть заголовок, нижний колонтитул и макет боковой панели на моем сайте. Могу ли я использовать их в своем шаблоне?

<?php
/*
Template Name: Blog
*/
?>
<?php include( PATH . 'http://www.example.com/includes/header.php' );  ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

<div <?php post_class() ?> id="post-<?php the_ID(); ?>">
  <h2><a href="<?php the_permalink() ?>">
    <?php the_title(); ?>
    </a></h2>
  <?php include (TEMPLATEPATH . '/inc/meta.php' ); ?>
  <div class="entry">
    <?php the_content(); ?>
  </div>
  <div class="postmetadata">
    <?php the_tags('Tags: ', ', ', '<br />'); ?>
    Posted in
    <?php the_category(', ') ?>
    |
    <?php comments_popup_link('No Comments &#187;', '1 Comment &#187;', '% Comments &#187;'); ?>
  </div>
</div>
<?php endwhile; ?>
<div class="mypagination">
  <?php include (TEMPLATEPATH . '/inc/nav.php' ); ?>
</div>
<?php else : ?>
<h2>Not Found</h2>
<?php endif; ?>
<?php include( PATH . 'http://www.example.com/includes/sidebar.php' );  ?>
<?php include( PATH . 'http://www.example.com/includes/footer.php' );  ?>

Я также попробовал:

<?php include('http://mywebsite.com/includes/header.php'); ?>
5
Jeremi Liwanag

Нет, вы не можете включать PHP файлы в тему, как вы указали.

Чтобы понять почему, все, что нам нужно сделать, это проявить здравый смысл и базовое критическое мышление:

  1. Вы будете делать удаленный запрос к удаленному серверу include не может это сделать
  2. Если каким-то чудом это сработало, у вас был бы серьезный эксплойт в безопасности, а я мог бы сделать что-то вроде этого: include( 'http://yoursite/wp-config.php' ); echo DB_PASSWORD;. Представьте, как легко было бы взломать сайты! Что меня останавливает, включая facebook.com/index.php?
  3. Если даже тогда это как-то сработало, и это было безопасно, представьте медлительность! Вы делаете запрос к серверу, а затем сервер идет и делает другой для заголовка, и другой для боковой панели, и другой для нижнего колонтитула, все это ожидание, кого это может беспокоить?
  4. Но, наконец, даже если включить можно сделать удаленные запросы. Что это не может, почему он должен возвращать PHP код? Не вернет ли он то, что выплевывает сервер, то есть финализированный HTML? Сервер запускает любой PHP до того, как его вернут, поэтому PHP не будет в том, что вы включаете ..

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

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

Так что, если я нахожусь в index.php, и в той же папке есть файл с именем sidebar.php, я бы включил его так:

include('sidebar.php');

include возвращает значение, если это не удалось. Семантика оператора include является общей базовой PHP и ​​не относится к теме этого сайта вопросов и ответов.

Однако я оставил этот вопрос открытым, потому что есть функция WordPress API, которую вы должны использовать вместо этого, которая лучше, чем include и требуется для того, что вам нужно.

Чтобы включить часть шаблона в тему, используйте:

get_template_part( 'partname' );

Эта функция также просматривает дочернюю или родительскую тему для указанной вами части.

Например, в этом коде:

get_template_part( 'sidebar', 'first' );

Он будет искать и включать в себя первый найденный из них:

  • дочерняя тема sidebar-first.php
  • родительская тема sidebar-first.php
  • дочерняя тема sidebar.php
  • родительская тема sidebar.php

Следует отметить, что вы должны использовать get_template_part только для включения файлов шаблонов. Не используйте его для включения файлов, таких как библиотеки, или других PHP файлов, которые не выводят html.

Я предлагаю вам прочитать следующие темы, прежде чем продолжить:

  • функции include и require в PHP.Net
  • родительские и дочерние темы
  • иерархия шаблонов и как WordPress выбирает какой шаблон использовать
  • <?php php ?> <?php tag ?> <?php spam ?> <?php and ?> <?php why ?> <?php its ?> <?php bad ?>
  • get_template_part
  • aPI WP_HTTP, для тех неподдельных времен вам действительно нужно сделать удаленный запрос к API. Здесь помогут такие функции, как wp_remote_get и wp_remote_post.
  • Отладка PHP. Ваши белые страницы являются PHP Фатальными ошибками, но, поскольку у вас настроено ведение журнала ошибок, чтобы скрыть его от внешнего интерфейса, оно заносится в файл журнала ошибок, о котором вы не знаете. Найдите свой журнал ошибок, определите WP_DEBUG в своем wp-config.php и установите плагин, такой как панель отладки или монитор запросов, это очень поможет вам. Убедитесь, что вы вызываете wp_footer в нижнем колонтитуле вашего шаблона.
7
Tom J Nowell

предположим, у вас есть этот кенарий:

Ваша установка WordPress размещается в корневой папке "www" как ваш сайт, а ваш header.php находится в папке "www/includes".

В вашей теме WordPress, просто добавьте

[. .____] <? PHP [. .____] включают ( 'включает/header.php'); [. .____]> [. .____]

Когда WordPress читает файлы тем, он использует корневой путь.

2
eduardogoncalves

Вы не можете включить внешний ресурс в функции include()! Включите работы по внутренним путям сервера. Вы не можете включить URL-адрес, как вы хотите. Это PHP проблема безопасности!

Ты можешь использовать:

get_file_contents('http://your.url'); 

или используйте библиотеку Curl.

1
Giorgio Tedesco

Когда я проверял основные файлы, следующий код, который я нашел в файле wp/wp-includes/general-template.php для функции get_header()

я нашел следующие строки

$templates[] = 'header.php';

locate_template( $templates, true );

Поэтому я использую его в своем коде (index.php), как это

<?php get_header();

    $myphpfile[] = 'grid.php';
    locate_template( $myphpfile, true );
?>
0
abdul rashid

Для детской темы:

<?php echo get_stylesheet_directory_uri().'/subfoldername/add.php';?>

Ты можешь использовать

For Parent Theme: get_template_directory() or get_template_directory_uri()
For Child Theme: get_stylesheet_directory() or get_stylesheet_directory_uri()
0
Super Model