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

263

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

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

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

NB. У меня нет особой необходимости взаимодействовать с API WordPress - кроме включения некоторых других библиотек PHP, мне нужно, чтобы у меня не было других зависимостей в коде PHP, который я хочу включить в страницу WordPress. Очевидно, что любое решение, не требующее изучения WordPress API, будет лучшим.

резерфорд
источник
Вы можете использовать эти плагины: wordpress.org/extend/plugins/exec-php или wordpress.org/extend/plugins/php-code-widget. Надеюсь, это поможет!
Микаэль

Ответы:

400

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

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

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

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

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

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

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

Источник: Создание пользовательских шаблонов страниц для глобального использования.

Адам Хопкинсон
источник
20
Опция шаблона не была доступна, пока я не создал файл с комментарием. Затем появилась опция шаблона. Хорошо - я собирался использовать шорткоды, но это намного проще.
Дейв Хильдич
1
Есть ли недостаток использования плагина для публикации php?
Сухаил Гупта
1
Страница - это страница, когда браузер просматривает ее как запрос http - так что да.
Адам Хопкинсон
3
@DamianGreen вопрос не задает полностью автоматизированный способ, и фактически показывает предпочтение избегать WP API
Адам Хопкинсон
4
Этот ответ кажется неправильным, потому что он не использует повторно существующие элементы темы, а копирует их (пункт 2). Если тема предоставлена ​​третьей стороной, она может получать обновления темы, которые не будут каскадно передаваться в пользовательский шаблон. Кроме того, это усложняет изменение внешнего вида вашего сайта, изменение темы требует перестройки пользовательской страницы. Разве плагин не будет лучше по этим двум причинам? Как я читаю вопрос, ОП желает добавить дополнительные функциональные возможности, а не дополнительные элементы темы «Использование сторонних API»
Philip Couling
29

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

Я обнаружил, что этот подход работает лучше всего, в вашем файле .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, за исключением того, что он вызывает 404 заголовка, что странно, что они хотели бы вам использовать этот подход. Интеграция WordPress с вашим сайтом

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


Обновление: есть способ использовать wp-blog-header.phpбез 404 заголовков, но для этого необходимо добавить заголовки вручную. Примерно так будет работать в корне вашей установки WordPress:

<?php
    require_once(dirname(__FILE__) . '/wp-blog-header.php');
    header("HTTP/1.1 200 OK");
    header("Status: 200 All rosy");

    // Your WordPress functions here...
    echo site_url();
?>

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

Соломон Клоссон
источник
1
Тем не менее, появляются заголовки 404, и даже многосайтовый файл Wordpress wp-activate.phpдолжен отключать заголовок 404, устанавливая $wp_query->is_404 = falseпри активации новые мультисайты, использующиеся require( dirname( __FILE__ ) . '/wp-blog-header.php' );вверху этой страницы.
Соломон Клоссон
2
Я не понимаю, как вы не можете воссоздать проблему. Это очень просто воссоздать. Просто установите Wordpress, затем создайте файл .php, используйте wp-blog-header.phpподход, определенный на codex.wordpress.org/Integrating_WordPress_with_Your_Website, а затем посмотрите заголовок 404 в инструментах инспектора браузера.
Соломон Клоссон
1
Вот веб-страница, которая документирует и эту проблему, на случай, если вы пропустили ее во время интенсивного исследования этой проблемы: cooltrainer.org/…
Соломон Клоссон,
1
Проблема с заголовками - это проблема, возникающая в последних версиях WordPress, что я и предложил в своем первоначальном комментарии. Осторожно используйте слова типа «никогда не ошибается». :)
DrewT
1
Это очень неправильный подход к проблеме. Идя по этому пути, вы создаете решение, которое будет работать только до тех пор, пока WP не изменит свой загрузчик. Вы должны использовать доступные крючки для выполнения (легко) того, что он пытается сделать.
Лоуренс Джонсон
14

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

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

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

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

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

<?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>

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

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


РЕДАКТИРОВАТЬ 2017: Обратите внимание, что этот подход устарел

Для установки WordPress от 2016+ см. Как добавить страницу PHP в WordPress? дополнительные параметры для включения перед выводом данных вашей страницы в браузер.

DrewT
источник
9

Создание страницы шаблона является правильным ответом. Для этого просто добавьте это на страницу, которую вы создали в папке темы:

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

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

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

Питер Мортенсен
источник
5

Ни один ответ не охватывает, если вам нужно добавить страницу PHP за пределами темы WordPress. Это способ.

Вам нужно включить wp-load.php.

<?php require_once('wp-load.php'); ?>

Затем вы можете использовать любую функцию WordPress на этой странице.

Я самый глупый человек
источник
Эта идея была очень полезна для меня. Однако, проверьте этот пост об использовании require_once('wp-load.php');правильно
optimiertes
1

Создайте страницу с именем my-page.php и сохраните ее в каталоге вашей темы. Теперь отредактируйте этот php-файл и напишите следующую строку вверху страницы.

<?php /* Template Name: My Page */ ?>

Напишите ваш PHP-код в строке определения пользовательской страницы, вы можете вызвать другой шаблон WP, функции внутри этого файла.

Начните как <?php require_once("header.php");?>ИЛИ

каким бы способом вы не интегрировали верхний и нижний колонтитулы, чтобы макет был согласованным.

Так как это моя страница, вам нужно создать страницу из панели администратора WordPress. Зайдите в Admin => Страницы => Добавить новый

Добавьте заголовок страницы, в зависимости от того, как вы закодировали пользовательскую страницу, вы также можете добавить тело страницы (описание). Вы можете полностью пропустить описание, если оно написано на пользовательской странице php.

Справа выберите Шаблон. Выберите My Custom Page из выпадающего списка. У вас все настроено! Перейдите на слаг (постоянная ссылка), созданный [wordpress] [1], и посмотрите страницу.

ашиш такор
источник
1

Лучший способ добавить страницы PHP в WordPress Page Templateв child-themeпапку.

Как создать Page Templateв WordPress.

Создайте файл с именем template-custom.phpи вставьте его /wp-content/theme/my-theme/.

<?php
 /*
 * Template Name: Custom Template
 * Custom template used for custom php code display
 * @package   Portafolio WordPress Theme
 * @author    Gufran Hasan
 * @copyright Copyright templatecustom.com
 * @link      http://www.templatecustom.com
 */
?>
<?php get_header(); ?>
<?php
  //write code here

 ?>

<?php get_footer(); ?>

Больше подробностей

Гуфран Хасан
источник
1

Вы захотите взглянуть на API плагинов WordPress.

Это объясняет, как «подключать» и «фильтровать» различные части механики WordPress, чтобы вы могли выполнять собственный PHP-код практически в любом месте в любое время. Это перехватывание, фильтрация и создание собственного кода могут происходить в вашем файле functions.php в любой из ваших тем. Удачного кодирования :)

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

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

Если вы готовы иметь дело с API, я бы предложил подключить хук «template-redirect», который позволит вам указывать определенный URL или страницу на произвольный файл PHP, при этом все еще имея доступ к WordPress.

Стивен Р
источник
1

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

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

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

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

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

Попробуй это:

/**
 * The template for displaying demo page
 *
 * template name: demo template
 *
 */
Хина Патель
источник
0

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

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

Даниел
источник
0

Просто создайте page-mytitle.phpфайл в папке текущей темы, а из Dashboard откройте страницу «mytitle» .

Затем, когда вы вызываете страницу по URL, вы увидите страницу-mytitle.php. Вы должны добавить HTML, CSS, JavaScript, wp-loop и т. Д. В этот файл PHP ( page-mytitle.php).

Элиас Кацаниотис
источник
0

Вы можете добавить любой php-файл в папку вашей активной темы, например (/ wp-content / themes / your_active_theme /), а затем перейти к добавлению новой страницы из wp-admin и выбрать этот шаблон страницы из параметров шаблона страницы.

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

И есть еще один способ, как вы можете включить свой файл в functions.php и создать шорткод из него, а затем вы можете поместить этот шорткод на свою страницу следующим образом.

// CODE in functions.php 

function abc(){
 include_once('your_file_name.php');
}
add_shortcode('abc' , 'abc');

И затем вы можете использовать этот шорткод на боковой странице wp-admin следующим образом [abc] .

Аджай Катария
источник
-2
<?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(); ?>
Ахмед Эльчейх
источник
-2

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

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

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

Чандра Кумар
источник
Ссылка наполовину сломана: она перенаправляется два раза, и в ней нет подраздела под названием «Создание собственных шаблонов страниц» . Ближайшим может быть или не быть подраздел « Шаблоны страниц ». Существует также отдельная страница (с таким же именем) Шаблоны страниц
Питер Мортенсен
-5

Вы также можете напрямую использовать страницу PHP, например, создать страницу PHP и работать с полным путем.

Например, http: //localhost/path/filename.php

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