Как добавить страницу PHP в WordPress?

194

Я хочу создать пользовательскую страницу для своего блога WordPress, в которой будет выполняться мой PHP-код, оставаясь частью общего сайта CSS/theme/design.

PHP-код будет использовать сторонние API (поэтому мне нужно включить другие файлы PHP)

Как это сделать?

N.B. У меня нет конкретной необходимости взаимодействовать с Wordpress API - помимо включения некоторых других библиотек PHP, мне нужно, чтобы у меня не было других зависимостей в PHP-коде, который я хочу включить в WP-страницу. Поэтому очевидно, что любое решение, которое не требует изучения WP API, будет лучшим.

Теги:

12 ответов

289
Лучший ответ

Вам не нужно взаимодействовать с API или использовать плагин.

Сначала дублируйте post.php или page.php в вашей папке темы (под /wp-content/themes/themename/).

Переименуйте новый файл как templatename.php (где templatename - это то, что вы хотите назвать новым шаблоном). Чтобы добавить новый шаблон в список доступных шаблонов, введите следующее в начало нового файла:

<?php
/*
Template Name: Name of Template
*/
?>

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

Затем создайте новую страницу в своем блоге WordPress, и на экране редактирования страницы вы увидите раскрывающийся список шаблонов в виджетах Attributes справа. Выберите новый шаблон и опубликуйте страницу.

Ваша новая страница будет использовать код PHP, определенный в templatename.php

  • 11
    Реквизит @adam - это самый простой, простой и быстрый способ сделать это.
  • 0
    Это не сработало для детской темы Studiopress, которую я использовал.
Показать ещё 15 комментариев
11

Если вы хотите создать свой собственный .php файл и взаимодействовать с Wordpress без заголовков 404 и сохранить свою текущую структуру постоянной ссылки, нет необходимости в файле шаблона для этой 1 страницы, я обнаружил, что этот подход работает лучше всего в вашем. php файл:

<?php
    require_once(dirname(__FILE__) . '/wp-config.php');
    $wp->init();
    $wp->parse_request();
    $wp->query_posts();
    $wp->register_globals();
    $wp->send_headers();

    // Your Wordpress Functions here...
    echo site_url();
?>

Вместо этого вы можете просто выполнять любые функции wordpress. Кроме того, это предполагает, что ваш .php файл находится в корне вашего сайта wordpress, где находится ваш файл wp-config.php.

Это, для меня, является правдивым открытием, поскольку я использовал require_once(dirname(__FILE__) . '/wp-blog-header.php'); в течение самого долгого времени, так как Wordpress даже сообщает вам, что это подход, который вы должны использовать для интеграции функций Wordpress, cept, он вызывает 404 заголовка, что Странно, что они хотели бы, чтобы вы использовали этот подход. https://codex.wordpress.org/Integrating_WordPress_with_Your_Website

Я знаю, что многие люди ответили на этот вопрос, и у него уже есть принятый ответ, но вот хороший подход для файла .php в корне вашего сайта wordpress (или технически в любом месте, где вы хотите на своем сайте), что вы может просматривать и загружать без заголовков 404!

  • 0
    Хм, это интересная проблема. Я никогда не сталкивался с заголовком 404 с использованием require( dirname( __FILE__ ) . '/wp-blog-header.php' ); и я бы сказал, что это может быть связано с настройкой сервера, на котором вы размещаете WP. Или, может быть, это ошибка, представленная в определенных версиях WP.
  • 0
    Тем не менее, появляются 404 заголовки, и даже многосайтовый файл Wordpress в wp-activate.php $wp_query->is_404 = false должен отключить заголовок 404, установив $wp_query->is_404 = false при активации новых мультисайтов с помощью require( dirname( __FILE__ ) . '/wp-blog-header.php' ); в верхней части этой страницы.
Показать ещё 6 комментариев
11

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

На самом деле это просто сделать, включив файл wp-blog-header.php с помощью php require().

Вот пример, который использует строку запроса для генерации данных OG для Facebook для любого сообщения.

Возьмем пример такой ссылки, как http://example.com/yourfilename.php?1, где 1 - это идентификатор сообщения, которое мы хотим сгенерировать данные OG для:

Теперь в содержимом yourfilename.php, которое для нашего удобства находится в корневом каталоге WP:

<?php
    require( dirname( __FILE__ ) . '/wp-blog-header.php' );

    $uri = $_SERVER['REQUEST_URI'];
    $pieces = explode("?", $uri);
    $post_id = intval( $pieces[1] );

    // og:title
    $title = get_the_title($post_id);

    // og:description
    $post = get_post($post_id);
    $descr = $post->post_excerpt;

    // og:image
    $img_data_array = get_attached_media('image', $post_id);
    $img_src = null;
    $img_count = 0;

    foreach ( $img_data_array as $img_data ) {
        if ( $img_count > 0 ) {
            break;
        } else {
            ++$img_count;
            $img_src = $img_data->guid;
        }
    } // end og:image

?>
<!DOCTYPE HTML>
<html>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=yes" />
<meta property="og:title" content="<?php echo $title; ?>" />
<meta property="og:description" content="<?php echo $descr; ?>" />
<meta property="og:locale" content="en_US" />  
<meta property="og:type" content="website" />
<meta property="og:url" content="<?php echo site_url().'/your_redirect_path'.$post_id; ?>" />
<meta property="og:image" content="<?php echo $img_src; ?>" />
<meta property="og:site_name" content="Your Title" />
</html>

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

Мы могли бы создать специальный шаблон и отредактировать структуру permalink для этого, но поскольку он нужен только для одной страницы и потому, что мы не хотим, чтобы клиент удалял его из CMS, это выглядело как более чистый вариант.


ИЗМЕНИТЬ 2017: Обратите внимание, что этот подход теперь устарел

Для установок WP от 2016+ см. https://stackoverflow.com/questions/2810124/how-to-add-a-php-page-to-wordpress дополнительные параметры для включения до вывода ваших данных страницы в браузер.

7

Создание страницы шаблона - правильный ответ, так как это просто добавьте это на страницу, созданную в папке темы

<?php
/*
Template Name: mytemplate
*/
?>

Для запуска этого кода вам нужно выбрать mytemplate в качестве шаблона страницы с задней стороны

пожалуйста, просмотрите эту ссылку, чтобы получить правильные данные https://developer.wordpress.org/themes/template-files-section/page-template-files/page-templates/.

1

Широко распространенный ответ Адама Хопкинсона - не полностью автоматизированный способ создания страницы! он требует, чтобы пользователь вручную создавал страницу в конце WordPress (в тире wp-admin). Проблема в том, что хороший плагин должен иметь полностью автоматическую настройку, он не должен требовать от клиентов вручную создавать страницы.

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

Я думаю, что лучшим, полностью автоматизированным подходом было бы создание страницы с использованием wp_insert_post и ее сохранение в базе данных. Пример и отличная дискуссия о том, как предотвратить случайное удаление страницы пользователем, можно найти здесь: wordpress-automatically-creating-page

Откровенно говоря, я удивлен, что этот подход еще не упоминался как ответ на этот популярный вопрос (он был опубликован в течение 7 лет).

  • 0
    Сразу же после того, как я написал вышеупомянутый ответ, я понял, что цель пользователя заключается в том, чтобы иметь возможность включать PHP в содержимое страницы, этот подход явно не допускает этого; PHP может использоваться только для генерации контента, но не для включения в контент, поэтому страница будет сохраняться статически, а не динамически. Однако вы можете придать странице динамический вид, воссоздавая страницу и ее содержимое (предоставляя идентификатор страницы) каждый раз, когда она вызывается. Ваш плагин будет обрабатывать, когда и как это происходит, возможно, отслеживая $ _SERVER ["REQUEST_URI"]
  • 1
    В своем ответе вы говорите о предотвращении случайного удаления пользователем. Как ты это делаешь?
1

Вам нужно взглянуть на API плагинов WordPress. Это объясняет, как "перехватывать" и "фильтровать" в разные части механики WordPress, поэтому вы можете выполнять собственный код PHP практически в любом месте в любой момент времени. Это зависание, фильтрация и создание пользовательского кода могут выполняться в вашем файле functions.php в любой из ваших тем. Счастливое кодирование:)

  • 0
    Я действительно не хочу взаимодействовать с самим API Wordpress - мой PHP-код полностью независим от любых махинаций WP. Но мне нужно ссылаться на внешние файлы php. Вы уверены, что API - это то, что мне нужно изучить в этом случае?
  • 0
    Все зависит от того, что вы пытаетесь сделать. Использование API может помочь в некоторых случаях, а в других может оказаться совершенно несущественным. Все зависит от того, чего вы пытаетесь достичь. Вы можете воспользоваться предложением @ adam и использовать шаблоны страниц, или же вы можете хранить весь свой пользовательский код в одной корзине, а затем подключать / фильтровать различные части WordPress. Я бы сказал все и вся, выбери, что работает лучше всего, и что тебе удобно. Все три из этих ответов будут выполнять то, что вы хотите в той или иной форме.
0

Попробуйте следующее:

/**
 * The template for displaying demo page
 *
 * template name: demo template
 *
 */
0

Вы можете назвать свой файл newpage.php - поместите его в свой каталог тем в wp-content. Вы можете сделать его шаблоном страницы (см. http://codex.wordpress.org/Pages...) Или вы можете включить его в один из php файлов в своей теме, например header.php или single.php. Еще лучше, создайте дочернюю тему и поместите ее туда, так что вы оставите свой код темы в одиночку, и его легче обновить.

http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates

0

Помимо создания пользовательского файла шаблона и назначения этого шаблона на страницу (например, в примере в принятом ответе), существует также способ использования соглашения об именах шаблонов, который Wordpress использует для загрузки шаблонов (иерархия шаблонов). Создайте новую страницу и используйте пул этой страницы для имени файла шаблона (создайте файл шаблона с именем page- {slug}.php). WordPress автоматически загрузит шаблон, соответствующий этому правилу.

0

Если вы не хотите иметь дело с WP API, тогда ответ Адама действительно лучший.

Если бы вы хотели иметь дело с API, я бы предложил подключиться к крючку "шаблон-перенаправление", что позволило бы указать конкретный URL-адрес или страницу на произвольный PHP файл, все еще имея доступ к WP.

-1
<?php /* Template Name: CustomPageT1 */ ?>

<?php get_header(); ?>

<div id="primary" class="content-area">
    <main id="main" class="site-main" role="main">
        <?php
        // Start the loop.
        while ( have_posts() ) : the_post();

            // Include the page content template.
            get_template_part( 'template-parts/content', 'page' );

            // If comments are open or we have at least one comment, load up the comment template.
            if ( comments_open() || get_comments_number() ) {
                comments_template();
            }

            // End of the loop.
        endwhile;
        ?>

    </main><!-- .site-main -->

    <?php get_sidebar( 'content-bottom' ); ?>

</div><!-- .content-area -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>
-3

Вы также можете напрямую использовать страницу php, например, создать страницу php и запустить полный путь. например, http://localhost/path/filename.php

  • 0
    Но функция перевода не работает, поэтому по какой-то причине она не будет загружена.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню