Bagaimana saya bisa menambahkan halaman PHP ke WordPress?

263

Saya ingin membuat halaman khusus untuk blog WordPress saya yang akan mengeksekusi kode PHP saya di dalamnya, sambil tetap menjadi bagian dari keseluruhan situs CSS / tema / desain.

Kode PHP akan menggunakan API pihak ketiga (jadi saya harus memasukkan file PHP lainnya).

Bagaimana saya mencapai ini?

NB: Saya tidak memiliki kebutuhan khusus untuk berinteraksi dengan WordPress API - selain termasuk perpustakaan PHP tertentu lainnya, saya perlu saya tidak memiliki dependensi lain dalam kode PHP yang ingin saya sertakan dalam halaman WordPress. Jadi jelas setiap solusi yang tidak memerlukan pembelajaran API WordPress akan menjadi yang terbaik.

Rutherford
sumber
Anda dapat menggunakan plugin itu: wordpress.org/extend/plugins/exec-php atau wordpress.org/extend/plugins/php-code-widget Semoga ini bisa membantu!
Michaël

Jawaban:

400

Anda tidak perlu berinteraksi dengan API atau menggunakan plugin.

Pertama, duplikat post.phpatau page.phpdi folder tema Anda (di bawah /wp-content/themes/themename/).

Ubah nama file baru sebagai templatename.php(di mana templatename adalah apa yang ingin Anda sebut template baru Anda). Untuk menambahkan template baru Anda ke daftar template yang tersedia, masukkan berikut ini di bagian atas file baru:

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

Anda dapat memodifikasi file ini (menggunakan PHP) untuk memasukkan file lain atau apa pun yang Anda butuhkan.

Kemudian buat halaman baru di blog WordPress Anda, dan di layar pengeditan halaman Anda akan melihat dropdown Template di widget Atribut di sebelah kanan. Pilih template baru Anda dan terbitkan halamannya.

Halaman baru Anda akan menggunakan kode PHP yang didefinisikan dalam templatename.php

Sumber: Membuat Template Halaman Kustom untuk Penggunaan Global

Adam Hopkinson
sumber
20
Opsi template tidak tersedia sampai saya membuat file dengan komentar di dalamnya. Kemudian opsi templat muncul. Bagus - Saya akan menggunakan kode pendek tapi ini cara yang lebih mudah.
Dave Hilditch
1
Apakah ada kerugian menggunakan plugin untuk menerbitkan php?
Suhail Gupta
1
Halaman adalah halaman, ketika browser melihatnya sebagai permintaan http - jadi ya.
Adam Hopkinson
3
@DamianGreen pertanyaannya tidak meminta cara yang sepenuhnya otomatis, dan pada kenyataannya menunjukkan preferensi untuk menghindari WP API
Adam Hopkinson
4
Jawaban ini terasa salah karena tidak menggunakan kembali elemen tema yang ada, tetapi menyalinnya (ayat 2). Jika tema ini disediakan oleh pihak ketiga maka mungkin menerima pembaruan tema yang tidak akan mengalir ke templat kustom. Lebih lanjut itu menambah kompleksitas untuk mengubah tampilan dan nuansa situs Anda, mengubah tema memerlukan pembangunan kembali halaman kustom. Apakah plugin tidak lebih baik karena dua alasan ini? Cara saya membaca pertanyaan, OP ingin menambahkan fungsionalitas tambahan, bukan elemen tema tambahan "penggunaan API pihak ke-3"
Philip Couling
29

Jika Anda ingin membuat file .php Anda sendiri dan berinteraksi dengan WordPress tanpa 404 header dan menjaga struktur permalink Anda saat ini, tidak perlu file template untuk satu halaman itu.

Saya menemukan bahwa pendekatan ini berfungsi paling baik, dalam file .php Anda:

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

Kemudian Anda bisa melakukan fungsi WordPress apa saja setelah ini. Juga, ini mengasumsikan bahwa file .php Anda berada di dalam root situs WordPress Anda di mana wp-config.phpfile Anda berada.

Bagi saya, ini adalah penemuan yang tak ternilai karena saya menggunakan require_once(dirname(__FILE__) . '/wp-blog-header.php');untuk waktu yang paling lama karena WordPress bahkan memberi tahu Anda bahwa ini adalah pendekatan yang harus Anda gunakan untuk mengintegrasikan fungsi WordPress, kecuali, itu menyebabkan 404 header, yang aneh bahwa mereka ingin Anda menggunakan pendekatan ini. Mengintegrasikan WordPress dengan Situs Web Anda

Saya tahu banyak orang telah menjawab pertanyaan ini, dan itu sudah memiliki jawaban yang diterima, tetapi di sini ada pendekatan yang bagus untuk file .php di dalam root situs WordPress Anda (atau secara teknis di mana saja Anda inginkan di situs Anda), yang dapat Anda jelajahi untuk memuat tanpa 404 header!


Pembaruan: Ada cara untuk menggunakan wp-blog-header.phptanpa 404 header, tetapi ini mengharuskan Anda menambahkan header secara manual. Sesuatu seperti ini akan bekerja di root instalasi WordPress Anda:

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

Hanya untuk memperbarui Anda semua tentang ini, sedikit kode yang diperlukan untuk pendekatan ini, tetapi terserah Anda yang mana yang Anda gunakan.

Solomon Closson
sumber
1
Namun 404 Header terjadi, dan bahkan file multisite Wordpress di wp-activate.phpharus menonaktifkan 404 header dengan menetapkan $wp_query->is_404 = falseketika mengaktifkan multisite baru menggunakan require( dirname( __FILE__ ) . '/wp-blog-header.php' );di bagian atas halaman ini.
Solomon Closson
2
saya tidak mengerti bagaimana Anda tidak bisa menciptakan kembali masalah. Sangat mudah untuk membuat ulang. Cukup instal Wordpress, daripada membuat file .php, gunakan wp-blog-header.phppendekatan seperti yang didefinisikan pada codex.wordpress.org/Integrating_WordPress_with_Your_Website daripada melihat header 404 di alat inspektur browser Anda.
Solomon Closson
1
Berikut adalah halaman web yang mendokumentasikan masalah ini juga, jika Anda melewatkannya selama penelitian intensif Anda pada masalah ini: cooltrainer.org/…
Solomon Closson
1
Masalah header adalah masalah yang terjadi di versi terbaru WordPress, yang persis seperti yang saya sarankan di komentar awal saya. Hati-hati menggunakan kata-kata seperti 'tidak pernah gagal'. :)
DrewT
1
Ini adalah pendekatan yang sangat tidak tepat untuk suatu masalah. Dengan menempuh rute ini, Anda membuat solusi yang hanya akan berfungsi selama WP tidak mengubah bootstrapnya. Anda harus memanfaatkan pengait yang tersedia untuk menyelesaikan (dengan mudah) apa yang ingin dilakukan.
Lawrence Johnson
13

Jika Anda seperti saya, kadang-kadang Anda ingin bisa merujuk fungsi WordPress di halaman yang tidak ada di CMS. Dengan cara ini, itu tetap khusus backend dan tidak dapat secara tidak sengaja dihapus oleh klien.

Ini sebenarnya mudah dilakukan hanya dengan memasukkan wp-blog-header.phpfile menggunakan PHP require().

Berikut adalah contoh yang menggunakan string kueri untuk menghasilkan data Facebook Open Graph (OG) untuk setiap posting.

Ambil contoh tautan seperti di http://example.com/yourfilename.php?1mana 1ID pos yang ingin kami hasilkan data OG:

Sekarang dalam konten yourfilename.phpyang, untuk kenyamanan kita, terletak di direktori WordPress root:

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

Itu dia: model berbagi yang dihasilkan untuk setiap posting menggunakan gambar, kutipan, dan judul sebenarnya dari posting!

Kami dapat membuat templat khusus dan mengedit struktur permalink untuk melakukan ini, tetapi karena itu hanya diperlukan untuk satu halaman dan karena kami tidak ingin klien menghapusnya dari dalam CMS, ini sepertinya merupakan opsi bersih.


EDIT 2017: Harap dicatat bahwa pendekatan ini sekarang sudah usang

Untuk instalasi WordPress dari 2016+ silakan lihat Bagaimana saya bisa menambahkan halaman PHP ke WordPress? untuk parameter tambahan untuk disertakan sebelum mengeluarkan data halaman Anda ke browser.

DrewT
sumber
9

Membuat halaman templat adalah jawaban yang benar. Untuk ini, tambahkan saja ini ke halaman yang Anda buat di dalam folder tema:

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

Untuk menjalankan kode ini, Anda harus memilih "mytemplate" sebagai templat halaman dari bagian belakang.

Silakan lihat tautan ini untuk mendapatkan detail yang benar https://developer.wordpress.org/themes/template-files-section/page-template-files/ .

Peter Mortensen
sumber
5

Jawaban apa pun tidak mencakup jika Anda perlu menambahkan halaman PHP di luar Tema WordPress. Inilah caranya.

Anda harus memasukkan wp-load.php.

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

Kemudian Anda dapat menggunakan fungsi WordPress apa pun di halaman itu.

Akulah Orang yang Paling Bodoh
sumber
Gagasan ini sangat berguna bagi saya. Namun lihat pos ini tentang menggunakan require_once('wp-load.php');dengan benar
optimiertes
1

Buat halaman menyebutnya my-page.php dan simpan di bawah direktori tema Anda. Sekarang, edit file php ini dan tulis baris berikut di bagian atas halaman

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

Tulis kode PHP Anda di bawah baris definisi halaman kustom, Anda dapat memanggil template WP Anda yang lain, fungsi di dalam file ini.

Mulai seperti <?php require_once("header.php");?>ATAU

apa pun cara Anda mengintegrasikan header dan footer Anda untuk menjaga tata letak konsisten.

Karena ini adalah halaman saya, Anda PERLU MENCIPTAKAN HALAMAN dari panel admin WordPress. Pergi ke Admin => Halaman => Tambah Baru

Tambahkan judul halaman, tergantung pada bagaimana Anda mengkodekan halaman kustom, Anda mungkin menambahkan tubuh halaman (deskripsi) juga. Anda dapat melewatkan deskripsi sepenuhnya jika itu ditulis di halaman php khusus.

Di sebelah kanan, pilih Templat. Pilih Halaman Kustom Saya dari dropdown. Anda sudah siap! Pergi ke siput (permalink) yang dibuat oleh [wordpress] [1] dan lihat halaman.

thakor ashish
sumber
1

Cara terbaik untuk menambahkan halaman PHP di WordPress ke Page Templatedalam child-themefolder.

Cara membuatnya Page Templatedi WordPress.

Buat file dengan nama template-custom.phpdan masukkan /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(); ?>

Untuk lebih jelasnya

Gufran Hasan
sumber
1

Anda akan ingin melihat ke API plugin WordPress.

Ini menjelaskan cara "menghubungkan" dan "memfilter" ke berbagai bagian mekanika WordPress, sehingga Anda dapat mengeksekusi kode PHP khusus hampir di mana saja pada waktu tertentu. Pengait, pemfilteran, dan penulisan kode khusus ini semua dapat terjadi di file functions.php Anda di salah satu tema Anda. Selamat coding :)

hwhterwhite
sumber
Saya tidak benar-benar ingin berinteraksi dengan Wordpress API sendiri - kode PHP saya benar-benar independen dari WP shenanigans. Tapi saya perlu referensi file php eksternal. Apakah Anda yakin API itu yang perlu saya pelajari dalam kasus ini?
rutherford
Itu semua tergantung pada apa yang Anda coba lakukan. Menggunakan API dapat membantu dalam beberapa kasus dan yang lainnya sama sekali tidak penting. Itu semua tergantung pada apa yang ingin Anda capai. Anda dapat pergi dengan saran @ adam dan menggunakan templat halaman atau Anda dapat menyimpan semua kode khusus Anda dalam satu keranjang dan kemudian mengaitkan / memfilter ke berbagai bagian WordPress. Saya akan mengatakan semuanya, pilih yang terbaik untuk Anda dan apa yang Anda rasa nyaman. Ketiga jawaban ini akan mencapai apa yang Anda inginkan dalam satu atau lain bentuk.
hsatterwhite
1

Jika Anda tidak ingin berurusan dengan API WordPress, maka jawaban Adam adalah yang terbaik.

Jika Anda bersedia berurusan dengan API, saya sarankan menghubungkan ke kait "template-redirect", yang akan memungkinkan Anda untuk mengarahkan URL atau halaman tertentu ke file PHP sewenang-wenang sementara masih memiliki akses ke WordPress.

Stephen R
sumber
1

Jawaban yang diterima secara luas oleh Adam Hopkinson bukanlah metode yang sepenuhnya otomatis untuk membuat halaman! Dibutuhkan pengguna untuk secara manual membuat halaman di bagian belakang WordPress (di dasbor wp-admin). Masalahnya, plugin yang bagus harus memiliki pengaturan otomatis sepenuhnya. Seharusnya tidak mengharuskan klien untuk membuat halaman secara manual.

Juga, beberapa jawaban lain yang diterima secara luas di sini melibatkan pembuatan halaman statis di luar WordPress, yang kemudian hanya menyertakan beberapa fungsi WordPress untuk mencapai header dan footer bertema. Meskipun metode itu dapat berfungsi dalam beberapa kasus, ini dapat membuat mengintegrasikan halaman-halaman ini dengan WordPress menjadi sangat sulit tanpa menyertakan semua fungsinya.

Saya pikir pendekatan terbaik, sepenuhnya otomatis, akan membuat halaman menggunakan wp_insert_postdan memilikinya berada di database. Contoh dan diskusi hebat tentang itu, dan bagaimana mencegah penghapusan halaman oleh pengguna secara tidak disengaja, dapat ditemukan di sini: wordpress-otomatis-membuat-halaman

Terus terang, saya terkejut pendekatan ini belum disebutkan sebagai jawaban untuk pertanyaan populer ini (telah diposting selama 7 tahun).

Damian Green
sumber
1
Segera setelah saya menulis jawaban di atas, saya menyadari bahwa maksud dari pengguna adalah untuk dapat memasukkan PHP ke dalam konten halaman, pendekatan ini jelas tidak memungkinkan untuk itu; PHP hanya dapat digunakan untuk menghasilkan konten, tidak termasuk dalam konten, sehingga halaman akan disimpan secara statis daripada dinamis. Namun, Anda bisa memberikan tampilan dinamis pada halaman dengan membuat kembali halaman dan kontennya (dengan memberikan ID halaman) setiap kali dipanggil. Plugin Anda akan menangani kapan dan bagaimana ini terjadi, mungkin dengan memantau $ _SERVER ["REQUEST_URI"]
Damian Green
2
Dalam jawaban Anda, Anda berbicara tentang mencegah penghapusan tidak disengaja oleh pengguna. Bagaimana kamu melakukannya?
GJ
0

Coba ini:

/**
 * The template for displaying demo page
 *
 * template name: demo template
 *
 */
Heena Patel
sumber
0

Selain membuat file templat khusus dan menetapkan templat itu ke laman (seperti pada contoh dalam jawaban yang diterima), ada juga cara dengan konvensi penamaan templat yang digunakan WordPress untuk memuat templat (hierarki templat).

Buat halaman baru dan gunakan siput halaman itu untuk nama file templat (buat file templat bernama halaman- {slug} .php ). WordPress akan secara otomatis memuat template yang sesuai dengan aturan ini.

Danijel
sumber
0

Cukup buat page-mytitle.phpfile ke folder tema saat ini, dan dari Dashboard halaman "mytitle" .

Kemudian ketika Anda memohon halaman dengan URL Anda akan melihat halaman-mytitle.php. Anda harus menambahkan HTML, CSS, JavaScript, wp-loop, dll ke file PHP ini ( page-mytitle.php).

Elias Katsaniotis
sumber
0

Anda dapat menambahkan file php apa pun di bawah folder tema aktif Anda seperti (/ wp-content / themes / your_active_theme /) dan kemudian Anda dapat menambahkan halaman baru dari wp-admin dan memilih templat halaman ini dari opsi templat halaman.

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

Dan ada satu cara lain seperti Anda dapat memasukkan file Anda di functions.php dan membuat kode pendek dari itu dan kemudian Anda dapat memasukkan kode pendek itu di halaman Anda seperti ini.

// CODE in functions.php 

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

Dan kemudian Anda dapat menggunakan kode pendek ini di halaman samping wp-admin seperti ini [abc] .

Ajay Katariya
sumber
-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
sumber
-2

Anda dapat memberi nama file Anda "newpage.php" - letakkan di direktori tema Anda di wp-content. Anda dapat menjadikannya templat halaman (lihat http://codex.wordpress.org/Pages .. ) atau Anda dapat memasukkannya ke dalam salah satu file PHP dalam tema Anda, seperti header.php atau single.php.

Lebih baik lagi, buat tema anak dan letakkan di sana, sehingga Anda meninggalkan kode tema Anda sendiri, dan lebih mudah untuk memperbarui.

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

Chandra Kumar
sumber
Tautan ini setengah rusak: Ini dialihkan dua kali dan tidak ada sub bagian bernama "Membuat Templat Halaman Anda Sendiri" . Sub bagian yang terdekat atau mungkin bukan " Templat Halaman ". Ada juga halaman terpisah (nama yang sama) Template Halaman
Peter Mortensen
-5

Anda juga dapat langsung menggunakan halaman PHP, seperti membuat halaman PHP dan menjalankannya dengan path lengkap.

Seperti, http: //localhost/path/filename.php

nim
sumber
Tetapi fungsi terjemahan tidak berfungsi, jadi karena alasan tertentu tidak akan dimuat.
ram4nd