Jak mogę dodać stronę PHP do WordPress?

263

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

Kod PHP korzysta z interfejsów API innych firm (więc muszę dołączyć inne pliki PHP).

Jak to osiągnąć?

Uwaga: Nie mam szczególnej potrzeby interakcji z interfejsem API WordPress - oprócz dołączania niektórych innych bibliotek PHP, nie potrzebuję żadnych innych zależności w kodzie PHP, które chciałbym umieścić na stronie WordPress. Oczywiście każde rozwiązanie, które nie wymagałoby nauki interfejsu API WordPress, byłoby najlepsze.

Rutherford
źródło
możesz użyć tych wtyczek: wordpress.org/extend/plugins/exec-php lub wordpress.org/extend/plugins/php-code-widget Mam nadzieję, że to pomoże!
Michaël

Odpowiedzi:

400

Nie musisz wchodzić w interakcje z interfejsem API ani używać wtyczki.

Najpierw zduplikuj post.phplub page.phpw folderze motywu (poniżej /wp-content/themes/themename/).

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

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

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

Następnie utwórz nową stronę na swoim blogu WordPress, a na ekranie edycji strony zobaczysz menu Szablon 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: Tworzenie niestandardowych szablonów stron do użytku globalnego

Adam Hopkinson
źródło
20
Opcja szablonu nie była dostępna, dopóki nie utworzyłem pliku z komentarzem. Następnie pojawiła się opcja szablonu. Fajnie - zamierzałem używać skrótów, ale jest to o wiele łatwiejsze.
Dave Hilditch
1
Czy jest jakiś minus korzystania z wtyczki do publikowania php?
Suhail Gupta
1
Strona to strona, gdy przeglądarka ją przegląda, jest to żądanie HTTP - więc tak.
Adam Hopkinson,
3
@DamianGreen pytanie nie wymaga w pełni zautomatyzowanego sposobu, a w rzeczywistości preferuje unikanie WP API
Adam Hopkinson
3
Ta odpowiedź wydaje się błędna, ponieważ nie wykorzystuje ona ponownie istniejących elementów motywu, ale kopiuje je i wkleja (akapit 2). Jeśli motyw jest dostarczany przez firmę zewnętrzną, może otrzymywać aktualizacje motywu, które nie zostaną kaskadowane do niestandardowego szablonu. Ponadto zwiększa złożoność zmiany wyglądu witryny, zmiana motywu wymaga przebudowania niestandardowej strony. Czy wtyczka nie byłaby lepsza z tych dwóch powodów? Sposób, w jaki czytam pytanie, PO chce dodać dodatkową funkcjonalność, a nie dodatkowe elementy motywu „korzystanie z zewnętrznych interfejsów API”
Philip Couling
29

Jeśli chcesz utworzyć własny plik .php i współdziałać z WordPress bez nagłówków 404 i zachować aktualną strukturę permalink, nie ma potrzeby pliku szablonu dla tej jednej strony.

Odkryłem, że to podejście działa najlepiej w twoim pliku .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();
?>

Następnie możesz po prostu wykonać dowolne funkcje WordPress. Zakłada się również, że plik .php znajduje się w katalogu głównym witryny WordPress, w której znajduje sięwp-config.php znajduje się plik.

Dla mnie jest to bezcenne odkrycie, którego używałem require_once(dirname(__FILE__) . '/wp-blog-header.php');przez najdłuższy czas, ponieważ WordPress nawet mówi ci, że jest to podejście, które powinieneś zastosować do zintegrowania funkcji WordPress, z wyjątkiem tego, że powoduje 404 nagłówki, co jest dziwne, że chcieliby do korzystania z tego podejścia. Integracja WordPress z Twoją witryną

Wiem, że wiele osób odpowiedziało na to pytanie i ma już zaakceptowaną odpowiedź, ale oto dobre podejście do pliku .php w katalogu głównym witryny WordPress (lub technicznie gdziekolwiek chcesz na swojej stronie), którą możesz przeglądać i ładować bez 404 nagłówków!


Aktualizacja: Istnieje sposób użycia wp-blog-header.phpbez nagłówków 404, ale wymaga to ręcznego dodania nagłówków. Coś takiego będzie działać w katalogu głównym instalacji 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();
?>

Wystarczy zaktualizować to wszystko, trochę mniej kodu potrzebnego do tego podejścia, ale to od Ciebie zależy, którego użyjesz.

Solomon Closson
źródło
1
Występują jednak nagłówki 404, a nawet plik wielu witryn Wordpress wp-activate.phpmusi wyłączyć nagłówek 404, ustawiając $wp_query->is_404 = falsepodczas aktywacji nowych witryn za pomocą require( dirname( __FILE__ ) . '/wp-blog-header.php' );u góry tej strony.
Solomon Closson
2
nie rozumiem, jak nie można odtworzyć problemu. Odtworzenie jest bardzo proste. Wystarczy zainstalować Wordpress, niż utworzyć plik .php, użyj wp-blog-header.phppodejścia zdefiniowanego na codex.wordpress.org/Integrating_WordPress_with_Your_Website niż zobaczyć nagłówek 404 w narzędziach inspektora przeglądarki.
Solomon Closson
1
Oto strona internetowa, która dokumentuje również ten problem, na wypadek gdybyś przeoczył go podczas intensywnych badań nad tym problemem: cooltrainer.org/…
Solomon Closson
1
Problem z nagłówkiem to problem występujący w najnowszych wersjach WordPress, co dokładnie zasugerowałem w moim początkowym komentarzu. Ostrożnie używaj słów typu „nigdy nie zawodzi”. :)
DrewT
1
To bardzo niewłaściwe podejście do problemu. Idąc tą drogą, tworzysz rozwiązanie, które będzie działać tylko tak długo, jak WP nie zmieni swojego bootstrapu. Powinieneś wykorzystywać dostępne haki, aby osiągnąć (łatwo) to, co to próbuje zrobić.
Lawrence Johnson
13

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

W rzeczywistości jest to proste, po prostu dołączając wp-blog-header.phpplik za pomocą PHP require().

Oto przykład, który wykorzystuje ciąg zapytania do wygenerowania Facebook Open Graph (OG) dla dowolnego postu.

Weźmy przykład linku, na przykład http://example.com/yourfilename.php?1gdzie 1jest identyfikator postu, dla którego chcemy wygenerować dane OG dla:

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

Masz to: wygenerowane modele udostępniania dla każdego postu przy użyciu jego rzeczywistego obrazu, fragmentu i tytułu!

Aby to zrobić, moglibyśmy stworzyć specjalny szablon i edytować strukturę permalink, ale ponieważ jest on potrzebny tylko dla jednej strony, a ponieważ nie chcemy, aby klient usunął go z CMS, wydawało się to czystszą opcją.


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

W przypadku instalacji WordPress od 2016 roku zobacz Jak mogę dodać stronę PHP do WordPress? w celu uwzględnienia dodatkowych parametrów przed wysłaniem danych strony do przeglądarki.

DrewT
źródło
9

Utworzenie strony szablonu jest poprawną odpowiedzią. W tym celu wystarczy dodać to do strony utworzonej w folderze motywu:

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

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

Proszę zobaczyć ten link, aby uzyskać prawidłowe szczegóły https://developer.wordpress.org/themes/template-files-section/page-template-files/ .

Peter Mortensen
źródło
5

Żadna odpowiedź nie obejmowała, jeśli musisz dodać stronę PHP poza motywem WordPress. To jest sposób.

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

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

Następnie możesz użyć dowolnej funkcji WordPress na tej stronie.

Jestem najgłupszą osobą
źródło
Ten pomysł był dla mnie bardzo przydatny. Jednak sprawdź ten post na temat require_once('wp-load.php');prawidłowego korzystania
optimiertes
1

Utwórz stronę o nazwie my-page.php i zapisz ją w katalogu motywów. Teraz edytuj ten plik php i napisz następujący wiersz u góry 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 tego, jak zintegrujesz nagłówek i stopkę, aby zachować spójność układu.

Ponieważ jest to moja strona, musisz utworzyć stronę z panelu administracyjnego WordPress. Przejdź do Administrator => Strony => Dodaj nowy

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

Po prawej stronie wybierz Szablon. Z menu wybierz Moja strona niestandardowa. Wszystko gotowe! Idź do ślimaka (permalink) utworzonego przez [wordpress] [1] i zobacz stronę.

Ashish Thakor
źródło
1

Najlepszym sposobem, aby dodać strony PHP w WordPressie aby Page Templatewchild-theme folderze.

Jak stworzyć Page Template w WordPress.

Utwórz plik o nazwie template-custom.phpi włóż go /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(); ?>

Po więcej szczegółów

Gufran Hasan
źródło
1

Będziesz chciał zajrzeć do interfejsu API wtyczek WordPress.

To wyjaśnia, jak „zaczepić” i „przefiltrować” różne części mechaniki WordPress, dzięki czemu można wykonać niestandardowy kod PHP praktycznie w dowolnym miejscu i czasie. To przechwytywanie, filtrowanie i niestandardowe tworzenie kodu może odbywać się w pliku functions.php w dowolnym motywie. Miłego kodowania :)

hsatterwhite
źródło
Jednak tak naprawdę nie chcę wchodzić w interakcje z samym interfejsem API Wordpress - mój kod PHP jest całkowicie niezależny od jakichkolwiek shenaniganów WP. Ale muszę odwoływać się do zewnętrznych plików php. Czy jesteś pewien, że w tym przypadku muszę się nauczyć interfejsu API?
rutherford
Wszystko zależy od tego, co próbujesz zrobić. Korzystanie z interfejsu API może w niektórych przypadkach pomóc, a inne mogą być zupełnie nieistotne. Wszystko zależy od tego, co próbujesz osiągnąć. Możesz skorzystać z sugestii @ adam i użyć szablonów stron lub możesz przechowywać cały swój niestandardowy kod w jednym koszyku, a następnie podłączyć / przefiltrować do różnych części WordPress. Powiedziałbym wszystko, wybierz to, co działa najlepiej i z czym czujesz się komfortowo. Wszystkie trzy z tych odpowiedzi osiągną to, co chcesz w tej czy innej formie.
hsatterwhite
1

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

Jeśli chciałbyś poradzić sobie z API, sugerowałbym podpięcie się do haka „przekierowanie szablonu”, który pozwoliłby ci wskazać konkretny adres URL lub stronę na dowolny plik PHP, mając nadal dostęp do WordPress.

Stephen R.
źródło
1

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 powinno wymagać od klientów ręcznego tworzenia stron.

Ponadto niektóre z innych powszechnie akceptowanych odpowiedzi obejmują utworzenie strony statycznej poza WordPress, która następnie zawiera tylko niektóre funkcje WordPress w celu uzyskania nagłówka i stopki tematycznej. Chociaż ta metoda może działać w niektórych przypadkach, może to bardzo utrudnić integrację tych stron z WordPress bez uwzględnienia wszystkich jego funkcji.

Myślę, że najlepszym, w pełni zautomatyzowanym podejściem byłoby utworzenie strony przy użyciu wp_insert_posti umieszczenie jej w bazie danych. Przykład i świetna dyskusja na ten temat oraz sposoby zapobiegania przypadkowemu usunięciu strony przez użytkownika można znaleźć tutaj: wordpress-automatycznie-tworząc stronę

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

Damian Green
źródło
1
Natychmiast po napisaniu powyższej odpowiedzi zdałem sobie sprawę, że intencją użytkownika była możliwość włączenia PHP do zawartości strony, takie podejście oczywiście na to nie pozwala; PHP może być używane tylko do generowania treści, nie jest zawarte w treści, dlatego strona byłaby zapisywana raczej statycznie niż dynamicznie. Można jednak nadać stronie dynamiczny wygląd, odtwarzając stronę i jej zawartość (podając identyfikator strony) przy każdym wywołaniu. Twoja wtyczka poradzi sobie, kiedy i jak to nastąpi, być może poprzez monitorowanie $ _SERVER [„REQUEST_URI”]
Damian Green
2
W swojej odpowiedzi mówisz o zapobieganiu przypadkowemu usunięciu przez użytkownika. Jak to robisz?
GJ
0

Spróbuj tego:

/**
 * The template for displaying demo page
 *
 * template name: demo template
 *
 */
Heena Patel
źródło
0

Oprócz utworzenia niestandardowego pliku szablonu i przypisania tego szablonu do strony (jak w przykładzie w zaakceptowanej odpowiedzi) istnieje również sposób z konwencją nazewnictwa szablonów, której WordPress używa do ładowania szablonów (hierarchia szablonów).

Utwórz nową stronę i użyj informacji o tej stronie jako nazwy pliku szablonu (utwórz plik szablonu o nazwie page- {slug} .php ). WordPress automatycznie załaduje szablon, który pasuje do tej reguły.

Danijel
źródło
0

Wystarczy utworzyć page-mytitle.phpplik do folderu bieżącego motywu, a na pulpicie nawigacyjnym stronę „mytitle” .

Następnie, gdy wywołasz stronę za pomocą adresu URL, zobaczysz stronę mytitle.php. Musisz dodać HTML, CSS, JavaScript, wp-loop itp. Do tego pliku PHP ( page-mytitle.php).

Elias Katsaniotis
źródło
0

Możesz dodać dowolny plik php w folderze aktywnych motywów, np. (/ Wp-content / themes / your_active_theme /), a następnie możesz dodać nową stronę z wp-admin i wybrać ten szablon strony z opcji szablonu strony.

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

Jest jeszcze jeden sposób, w jaki możesz dołączyć plik do functions.php i utworzyć z niego krótki kod, a następnie możesz umieścić ten kod na swojej stronie w ten sposób.

// CODE in functions.php 

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

Następnie możesz użyć tego krótkiego kodu na stronie bocznej wp-admin, takiej jak ta [abc] .

Ajay Katariya
źródło
-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(); ?>
Ahmed Elcheikh
źródło
-2

Możesz nazwać swój plik „newpage.php” - umieść go w katalogu motywów w wp-content. Możesz ustawić go jako szablon strony (patrz http://codex.wordpress.org/Pages .. ) Lub możesz dołączyć go do jednego z plików PHP w swoim motywie, np. Header.php lub single.php.

Co więcej, stwórz motyw potomny i umieść go tam, aby zostawić kod motywu w spokoju i łatwiej go zaktualizować.

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

Chandra Kumar
źródło
Link jest w połowie uszkodzony: przekierowuje dwa razy i nie ma żadnej podsekcji o nazwie „Tworzenie własnych szablonów strony” . Najbliższym może być lub nie podsekcja Szablony stron ”. Istnieje również osobna strona (ta sama nazwa) Szablony stron
Peter Mortensen
-5

Możesz także bezpośrednio użyć strony PHP, np. Utworzyć stronę PHP i uruchomić pełną ścieżkę.

Na przykład http: //localhost/path/filename.php

nim
źródło
Ale funkcja tłumaczenia nie działa, więc z jakiegoś powodu nie zostanie załadowana.
ram4nd