Jak dodać stronę PHP do WordPressa?

Chcę stworzyć niestandardową stronę dla mojego bloga WordPress, który wykona mój kod PHP w nim, pozostając częścią ogólnej witryny CSS / theme / design.

Kod PHP będzie korzystać z 3rd party API (więc muszę dołączyć inne pliki PHP)

Jak to osiągnąć?

N. B. Nie mam specyficznej potrzeby interakcji z API Wordpress - poza włączeniem niektórych innych bibliotek PHP, których potrzebuję, nie mam innych zależności w kodzie PHP, które chcę włączyć w WP strona. Więc oczywiście każde rozwiązanie, które nie wymagało nauki API WP, byłoby najlepsze.

 213
Author: Volker E., 2010-05-11

16 answers

Nie musisz wchodzić w interakcję z API ani używać wtyczki.

Najpierw zduplikuj post.php lub page.php w folderze z motywami (pod /wp-content/themes/themename/).

Zmień nazwę nowego pliku na templatename.php (gdzie templatename jest tym, co chcesz nazwać nowym szablonem). Aby dodać nowy szablon do listy dostępnych szablonów, wprowadź następujący tekst na górze nowego pliku:

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

Możesz zmodyfikować ten plik (za pomocą PHP), aby zawierał inne pliki lub cokolwiek potrzebujesz.

Następnie utwórz nową stronę w swoim Blog WordPress, a na ekranie edycji strony zobaczysz szablon rozwijane w widżecie atrybuty po prawej stronie. Wybierz nowy szablon i opublikuj stronę.

Twoja nowa strona będzie używać kodu PHP zdefiniowanego w templatename.php

Źródło: https://developer.wordpress.org/themes/template-files-section/page-template-files/#creating-custom-page-templates-for-global-use

 334
Author: Adam Hopkinson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-24 21:49:00

Jeśli chcesz stworzyć swój własny .plik php i interakcji z Wordpress bez nagłówków 404 i utrzymanie bieżącej struktury permalink nie ma potrzeby pliku szablonu dla tej strony 1, znalazłem, że to podejście działa najlepiej, w Twoim .plik 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();
?>

Niż można po prostu wykonać wszelkie funkcje wordpress po tym. Również, to zakłada, że Twój .plik php znajduje się w katalogu głównym witryny wordpress, w którym znajduje się plik wp-config.php.

To dla mnie bezcenne discovery jak używałem require_once(dirname(__FILE__) . '/wp-blog-header.php'); przez najdłuższy czas, ponieważ Wordpress nawet mówi, że jest to podejście, które należy użyć do integracji funkcji Wordpress, cept, powoduje nagłówki 404, co jest dziwne, że chcieliby, aby użyć tego podejścia. https://codex.wordpress.org/Integrating_WordPress_with_Your_Website

Wiem, że wiele osób odpowiedziało na to pytanie i ma już zaakceptowaną odpowiedź, ale tutaj jest ładne podejście do .plik php w katalogu głównym Twojego witryna wordpress (lub technicznie gdziekolwiek chcesz w swojej witrynie), że można przeglądać i ładować bez nagłówków 404!

EDIT

Tylko krótka aktualizacja tutaj. Istnieje sposób użycia wp-blog-header.php bez nagłówków 404, ale wymaga to ręcznego dodania nagłówków, coś takiego będzie działać w katalogu głównym instalacji WordPressa:

<?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();
?>

Aby was wszystkich poinformować, trochę mniej kodu potrzebnego do tego podejścia, ale to zależy od Ciebie, na którym 1 użyjesz.

 16
Author: Solomon Closson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-09 04:25:02

Jeśli jesteś taki jak ja, czasami chcesz mieć możliwość odwoływania się do funkcji WordPress na stronie, która nie istnieje w CMS. W ten sposób pozostaje specyficzny dla backendu i nie może zostać przypadkowo usunięty przez Klienta.

Jest to w rzeczywistości proste do zrobienia, włączając plik wp-blog-header.php za pomocą php require().

Oto przykład, który wykorzystuje ciąg zapytania do generowania danych Facebook og dla dowolnego postu.

Weźmy przykład linku typu http://example.com/yourfilename.php?1 Gdzie 1 jest identyfikatorem posta we chcesz wygenerować dane OG dla:

Teraz w treści yourfilename.php, która dla naszej wygody znajduje się w głównym katalogu 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>

Tutaj masz to: generowane modele udostępniania dla dowolnego postu za pomocą rzeczywistego obrazu posta, fragment i tytuł!

Mogliśmy stworzyć specjalny szablon i edytować strukturę permalink, aby to zrobić, ale ponieważ jest on potrzebny tylko dla jednej strony i ponieważ nie chcemy, aby Klient usuwał go z CMS, wydawało się, że opcja czystsza.


edycja 2017: Należy pamiętać, że to podejście jest obecnie przestarzałe

Dla instalacji WP od 2016+ zobacz https://stackoverflow.com/a/39800534/1958998 dla dodatkowych parametrów, które należy uwzględnić przed wysłaniem danych strony do przeglądarki.

 13
Author: DrewT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-24 21:51:45

Tworzenie strony szablonu jest poprawną odpowiedzią, po prostu dodaj ją do strony utworzonej w folderze motywów

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

Aby uruchomić ten kod, musisz wybrać mytemplate jako szablon strony z zaplecza

Zobacz ten link, aby uzyskać poprawne szczegóły https://developer.wordpress.org/themes/template-files-section/page-template-files/page-templates/.

 7
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-09 13:59:00

Każda odpowiedź nie obejmuje, jeśli chcesz dodać stronę PHP poza motywem WordPress. To jest droga.

Musisz dołączyć wp-load.php.

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

Wtedy możesz użyć dowolnej funkcji WordPress na tej stronie.

 2
Author: I am the Most Stupid Person,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-30 11:11:10

Będziesz chciał zajrzeć do API wtyczki WordPress. Wyjaśnia to, jak "podłączyć" i "filtrować" do różnych części mechaniki WordPress, dzięki czemu możesz wykonać niestandardowy kod PHP praktycznie w dowolnym miejscu w danym momencie. To zaczepianie, filtrowanie i tworzenie kodu niestandardowego mogą mieć miejsce w Twoich funkcjach.plik php w dowolnym z Twoich motywów. Szczęśliwego kodowania:)

 1
Author: hsatterwhite,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-11 12:03:47

Powszechnie akceptowana odpowiedź Adama Hopkinsona nie jest w pełni zautomatyzowaną metodą tworzenia strony! wymaga od użytkownika ręcznego utworzenia strony w zapleczu WordPressa (w desce rozdzielczej wp-admin). Problem polega na tym, że dobra wtyczka powinna mieć w pełni zautomatyzowaną konfigurację, nie powinna wymagać od klientów ręcznego tworzenia stron.

Również niektóre z innych powszechnie akceptowanych odpowiedzi obejmują tworzenie statycznej strony poza WordPressem, które następnie obejmują tylko niektóre z WordPressa funkcjonalność do osiągnięcia tematycznego nagłówka i stopki. Chociaż ta metoda może działać w niektórych przypadkach, może to sprawić, że integracja tych stron z WordPress będzie bardzo trudna bez uwzględnienia wszystkich jego funkcji.

Myślę, że najlepszym, w pełni zautomatyzowanym podejściem byłoby stworzenie strony za pomocą wp_insert_post i umieszczenie jej w bazie danych. Przykład i świetna dyskusja na ten temat oraz jak zapobiec przypadkowemu usunięciu strony przez użytkownika, można znaleźć tutaj: WordPress-automatycznie-Tworzenie-strony

Szczerze mówiąc, dziwię się, że takie podejście nie zostało jeszcze wymienione jako odpowiedź na to popularne pytanie (jest publikowane od 7 lat).

 1
Author: Damian Green,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-05 17:41:05

Twórz stronę nazwij ją my-page.php i zapisz go w katalogu motywów. Teraz edytuj ten plik php i napisz następującą linię na górze strony

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

Napisz swój kod PHP pod niestandardową linią definicji strony, możesz wywołać inny szablon WP, funkcje wewnątrz tego pliku.

Zacznij jak <?php require_once("header.php");?> lub

Niezależnie od sposobu integracji nagłówka i stopki, aby układ był spójny.

Ponieważ jest to moja strona, musisz utworzyć stronę z Panel administracyjny WordPress. Przejdź do Admin = > strony = > Dodaj nowy

Dodaj tytuł strony, w zależności od sposobu zakodowania niestandardowej strony, możesz również dodać treść (opis) strony. Możesz całkowicie pominąć opis, jeśli jest napisany na niestandardowej stronie php.

Po prawej stronie wybierz szablon. Wybierz z listy rozwijanej moją stronę niestandardową. Wszystko gotowe! Przejdź do slug (permalink) created by [WordPress][1] i zobacz stronę.

 1
Author: ashish thakor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-26 06:23:01

Jeśli nie chcesz zajmować się WP API, to odpowiedź Adama jest naprawdę najlepsza.

Jeśli chcesz poradzić sobie z API, sugerowałbym podłączenie do Hooka "template-redirect" , który pozwoliłby skierować konkretny adres URL lub stronę do dowolnego pliku PHP, mając jednocześnie dostęp do WP.

 0
Author: Stephen R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-12 15:24:15

Oprócz tworzenia niestandardowego pliku szablonu i przypisywania tego szablonu do strony ( jak w przykładzie w zaakceptowanej odpowiedzi ), istnieje również sposób z konwencją nazewnictwa szablonów, który WordPress używa do ładowania szablonów (hierarchia szablonów ). Utwórz nową stronę i użyj slug tej strony dla nazwy pliku szablonu (Utwórz plik szablonu o nazwie page-{SLUG}.php ). WordPress automatycznie załaduje szablon, który pasuje do tej reguły.

 0
Author: Danijel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-14 16:22:57

Spróbuj tego:

/**
 * The template for displaying demo page
 *
 * template name: demo template
 *
 */
 0
Author: Heena Patel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-11 10:54:13

Zmień nazwę nowego pliku na templatename.php (gdzie templateename jest tym, co chcesz nazwać nowym szablonem). Aby dodać nowy szablon do listy dostępnych szablonów, wprowadź następujący tekst na górze nowego pliku:

Możesz zmodyfikować ten plik (za pomocą PHP), aby zawierał inne pliki lub cokolwiek potrzebujesz.

Następnie utwórz nową stronę na swoim blogu WordPress, a na ekranie edycji strony zobaczysz rozwijane szablony w widżecie atrybuty po prawej stronie. Wybierz nowy szablon i opublikować stronę.

 0
Author: Nirav Webbleu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-20 09:05:34

Wystarczy utworzyć stronę-mytitle.php do foltera bieżącego motywu, a z Pulpitu strony mytitle. Następnie po wywołaniu strony przez adres URL zobaczysz stronę-mytitle.php. Musisz dodać htmp, css, JS wp-loop e.t.C do tego pliku php (page-mytitle.php)

 0
Author: Elias Katsaniotis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-28 09:51:04

Możesz nazwać swój plik newpage.php-umieść go w katalogu motywów w wp-content. Możesz zrobić z niego szablon strony (Zobacz http://codex.wordpress.org/Pages .. .) lub możesz umieścić go w jednym z plików php w Twoim temacie, np. nagłówku.php lub single.php. Co więcej, Utwórz motyw potomny i umieść go tam, więc zostaw kod motywu w spokoju i łatwiej jest go zaktualizować.

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

 -1
Author: Chandra Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-02 10:12:54
<?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(); ?>
 -1
Author: Ahmed Elcheikh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-05 08:45:50

Możesz również bezpośrednio użyć strony php, jak utworzyć stronę php i uruchomić z pełną ścieżką. jak, http://localhost/path/filename.php

 -3
Author: nim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-17 07:50:38