Làm cách nào để thêm trang PHP vào WordPress?


263

Tôi muốn tạo một trang tùy chỉnh cho blog WordPress của mình để thực thi mã PHP của tôi trong đó, trong khi vẫn là một phần của tổng thể trang web CSS / theme / design.

Mã PHP sẽ sử dụng API của bên thứ ba (vì vậy tôi cần bao gồm các tệp PHP khác).

Làm thế nào để tôi thực hiện điều này?

Lưu ý: Tôi không có nhu cầu cụ thể để tương tác với API WordPress - ngoài việc bao gồm một số thư viện PHP khác, tôi cần tôi không có sự phụ thuộc nào khác trong mã PHP mà tôi muốn đưa vào trang WordPress. Vì vậy, rõ ràng bất kỳ giải pháp nào không yêu cầu học API WordPress sẽ là giải pháp tốt nhất.


bạn có thể sử dụng các plugin đó: wordpress.org/extend/plugins/exec-php hoặc wordpress.org/extend/plugins/php-code-widget Hy vọng nó sẽ giúp ích!
Michaël

Câu trả lời:


400

Bạn không cần phải tương tác với API hoặc sử dụng plugin.

Đầu tiên, sao chép post.phphoặc page.phptrong thư mục chủ đề của bạn (bên dưới /wp-content/themes/themename/).

Đổi tên tệp mới thành templatename.php(trong đó templatename là những gì bạn muốn gọi mẫu mới của bạn). Để thêm mẫu mới của bạn vào danh sách các mẫu có sẵn, hãy nhập thông tin sau vào đầu tệp mới:

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

Bạn có thể sửa đổi tệp này (sử dụng PHP) để bao gồm các tệp khác hoặc bất cứ thứ gì bạn cần.

Sau đó, tạo một trang mới trong blog WordPress của bạn và trong màn hình chỉnh sửa trang, bạn sẽ thấy một danh sách thả xuống Mẫu trong tiện ích Thuộc tính ở bên phải. Chọn mẫu mới của bạn và xuất bản trang.

Trang mới của bạn sẽ sử dụng mã PHP được xác định trong templatename.php

Nguồn: Tạo mẫu trang tùy chỉnh để sử dụng toàn cầu


20
Tùy chọn mẫu không có sẵn cho đến khi tôi tạo tệp có nhận xét trong đó. Sau đó, tùy chọn mẫu xuất hiện. Nice - Tôi sẽ sử dụng shortcodes nhưng cách này dễ hơn.
Dave Hilditch

1
Có bất kỳ nhược điểm nào của việc sử dụng plugin để xuất bản php không?
Suhail Gupta

1
Một trang là một trang, khi trình duyệt xem đó là một yêu cầu http - vì vậy, có.
Adam Hopkinson

3
@DamianGreen câu hỏi không yêu cầu một cách hoàn toàn tự động và trên thực tế cho thấy ưu tiên tránh API WP
Adam Hopkinson

3
Câu trả lời này cảm thấy sai vì nó không sử dụng lại các yếu tố chủ đề hiện có, mà sao chép chúng (đoạn 2). Nếu chủ đề được cung cấp bởi bên thứ ba thì nó có thể nhận được các bản cập nhật chủ đề sẽ không xếp tầng qua mẫu tùy chỉnh. Hơn nữa, nó thêm sự phức tạp để thay đổi giao diện trang web của bạn, thay đổi chủ đề đòi hỏi phải xây dựng lại trang tùy chỉnh. Một plugin sẽ không tốt hơn vì hai lý do này? Cách tôi đọc câu hỏi, OP muốn thêm chức năng bổ sung, chứ không phải thêm các yếu tố chủ đề "sử dụng API của bên thứ 3"
Philip Couling

29

Nếu bạn muốn tạo tệp .php của riêng mình và tương tác với WordPress mà không cần tiêu đề 404 và giữ cấu trúc permalink hiện tại của bạn thì không cần phải có tệp mẫu cho một trang đó.

Tôi thấy rằng phương pháp này hoạt động tốt nhất, trong tệp .php của bạn:

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

Sau đó, bạn có thể chỉ cần thực hiện bất kỳ chức năng WordPress sau này. Ngoài ra, điều này giả định rằng tệp .php của bạn nằm trong thư mục gốc của trang web WordPress nơi đặt wp-config.phptệp của bạn .

Đối với tôi, đây là một khám phá vô giá vì tôi đã sử dụng require_once(dirname(__FILE__) . '/wp-blog-header.php');lâu nhất vì WordPress thậm chí còn nói với bạn rằng đây là cách tiếp cận mà bạn nên sử dụng để tích hợp các chức năng của WordPress, ngoại trừ, nó gây ra tiêu đề 404, điều kỳ lạ mà họ muốn bạn sử dụng phương pháp này. Tích hợp WordPress với trang web của bạn

Tôi biết nhiều người đã trả lời câu hỏi này và nó đã có câu trả lời được chấp nhận, nhưng đây là một cách tiếp cận hay cho tệp .php trong thư mục gốc của trang web WordPress của bạn (hoặc về mặt kỹ thuật ở bất cứ đâu bạn muốn trong trang web của mình), mà bạn có thể duyệt đến và tải mà không cần tiêu đề 404!


Cập nhật: Có một cách để sử dụng wp-blog-header.phpmà không cần tiêu đề 404, nhưng điều này yêu cầu bạn thêm vào các tiêu đề theo cách thủ công. Một cái gì đó như thế này sẽ hoạt động trong thư mục gốc của bản cài đặt WordPress của bạn:

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

Chỉ cần cập nhật tất cả cho bạn về điều này, một ít mã cần thiết cho phương pháp này, nhưng tùy thuộc vào bạn sử dụng cái nào.


1
Tuy nhiên, Tiêu đề 404 xảy ra và ngay cả tệp đa trang Wordpress wp-activate.phpphải vô hiệu hóa tiêu đề 404 bằng cách cài đặt $wp_query->is_404 = falsekhi kích hoạt nhiều trang mới sử dụng require( dirname( __FILE__ ) . '/wp-blog-header.php' );ở đầu trang này.
Solomon Closson

2
tôi không hiểu làm thế nào bạn không thể tái tạo vấn đề. Nó rất đơn giản để tạo lại. Chỉ cần cài đặt Wordpress, hơn là tạo tệp .php, sử dụng wp-blog-header.phpcách tiếp cận như được xác định trên codex.wordpress.org/Integrating_WordPress_with_Your_Website hơn là xem tiêu đề 404 trong các công cụ kiểm tra trình duyệt của bạn.
Solomon Closson

1
Đây là một trang web cũng ghi lại vấn đề này, trong trường hợp bạn bỏ lỡ nó trong quá trình nghiên cứu chuyên sâu về vấn đề này: cooltrainer.org/iêu
Solomon Closson

1
Vấn đề tiêu đề là một vấn đề xảy ra trong các phiên bản mới nhất của WordPress, đây chính xác là những gì tôi đã đề xuất trong nhận xét ban đầu của mình. Cẩn thận sử dụng những từ như 'không bao giờ thất bại'. :)
DrewT

1
Đây là một cách tiếp cận rất không đúng cho một vấn đề. Bằng cách đi theo lộ trình này, bạn đang tạo ra một giải pháp sẽ chỉ hoạt động miễn là WP không thay đổi bootstrap của nó. Bạn nên tận dụng các móc có sẵn để thực hiện (một cách dễ dàng) những gì điều này đang cố gắng làm.
Lawrence Johnson

13

Nếu bạn giống tôi, đôi khi bạn muốn có thể tham chiếu các chức năng WordPress trong một trang không tồn tại trong CMS. Bằng cách này, nó vẫn dành riêng cho phụ trợ và không thể bị xóa bởi khách hàng.

Điều này thực sự đơn giản để làm chỉ bằng cách bao gồm wp-blog-header.phptệp bằng PHP require().

Dưới đây là một ví dụ sử dụng chuỗi truy vấn để tạo Facebook Open Graph dữ liệu (OG) cho bất kỳ bài đăng nào.

Lấy ví dụ về một liên kết như http://example.com/yourfilename.php?1 nơi 1là ID của một bài đăng, chúng tôi muốn tạo ra dữ liệu OG cho:

Bây giờ, trong các nội dung yourfilename.php, để thuận tiện cho chúng tôi, được đặt trong thư mục gốc của 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>

Ở đó bạn có nó: các mô hình chia sẻ được tạo cho bất kỳ bài đăng nào sử dụng hình ảnh, đoạn trích và tiêu đề thực tế của bài đăng!

Chúng tôi có thể đã tạo một mẫu đặc biệt và chỉnh sửa cấu trúc permalink để thực hiện việc này, nhưng vì nó chỉ cần cho một trang và vì chúng tôi không muốn khách hàng xóa nó từ trong CMS, nên đây có vẻ như là tùy chọn sạch hơn.


EDIT 2017: Xin lưu ý rằng phương pháp này hiện không được chấp nhận

Để cài đặt WordPress từ năm 2016 trở lên, vui lòng xem Làm cách nào tôi có thể thêm trang PHP vào WordPress? để biết thêm thông số cần có trước khi xuất dữ liệu trang của bạn lên trình duyệt.


9

Tạo trang mẫu là câu trả lời chính xác. Đối với điều này, chỉ cần thêm điều này vào trang bạn đã tạo trong thư mục chủ đề:

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

Để chạy mã này, bạn cần chọn "mytemplate" làm mẫu của trang từ đầu cuối.

Vui lòng xem liên kết này để có được thông tin chi tiết chính xác https://developer.wordpress.org/theme/template-files-section/page-template-files/ .


5

Bất kỳ câu trả lời nào không bao gồm nếu bạn cần thêm một trang PHP bên ngoài Theme WordPress. Đây là cách.

Bạn cần bao gồm wp-load.php.

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

Sau đó, bạn có thể sử dụng bất kỳ chức năng WordPress nào trên trang đó.


Ý tưởng này rất hữu ích với tôi. Tuy nhiên, hãy kiểm tra bài đăng này về cách sử dụng require_once('wp-load.php');chính xác
tối ưu hóa

1

Tạo một trang gọi nó là my-page.php và lưu nó trong thư mục chủ đề của bạn. Bây giờ, chỉnh sửa tệp php này và viết dòng sau ở đầu trang

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

Viết mã PHP của bạn dưới dòng định nghĩa trang tùy chỉnh, bạn có thể gọi mẫu WP khác của mình, các hàm bên trong tệp này.

Bắt đầu như <?php require_once("header.php");?>OR

bất cứ cách nào bạn đang tích hợp tiêu đề và chân trang của mình để giữ bố cục nhất quán.

Vì đây là trang của tôi, bạn CẦN TẠO TRANG từ bảng quản trị WordPress. Chuyển đến Quản trị viên => Trang => Thêm mới

Thêm tiêu đề trang, tùy thuộc vào cách bạn đã mã hóa trang tùy chỉnh, bạn cũng có thể thêm thân trang (mô tả). Bạn hoàn toàn có thể bỏ qua phần mô tả nếu nó được viết trong trang php tùy chỉnh.

Ở phía bên tay phải, chọn Mẫu. Chọn trang tùy chỉnh của tôi từ danh sách thả xuống. Bạn đã sẵn sàng! Chuyển đến slug (permalink) được tạo bởi [wordpress] [1] và xem trang.


1

Cách tốt nhất để thêm các trang PHP trong WordPress Page Templatevào child-themethư mục.

Cách tạo Page Templatetrong WordPress.

Tạo một tập tin có tên template-custom.phpvà đặt nó vào /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(); ?>

Để biết thêm chi tiết


1

Bạn sẽ muốn xem qua API plugin của WordPress.

Điều này giải thích cách "móc" và "lọc" vào các phần khác nhau của cơ chế WordPress, do đó bạn có thể thực thi mã PHP tùy chỉnh khá nhiều ở mọi nơi tại bất kỳ thời điểm nào. Việc kết nối, lọc và tạo mã tùy chỉnh này đều có thể diễn ra trong tệp tin.php của bạn trong bất kỳ chủ đề nào của bạn. Chúc mừng mã hóa :)


Mặc dù vậy, tôi thực sự không muốn tương tác với API Wordpress - mã PHP của tôi hoàn toàn độc lập với bất kỳ shenanigans WP nào. Nhưng tôi cần phải tham khảo các tập tin php bên ngoài. Bạn có chắc chắn API là thứ tôi cần học trong trường hợp này không?
rutherford

Tất cả phụ thuộc vào những gì bạn đang cố gắng làm. Sử dụng API có thể giúp ích trong một số trường hợp và những trường hợp khác là hoàn toàn không cần thiết. Tất cả phụ thuộc vào những gì bạn đang cố gắng để đạt được. Bạn có thể đi với đề xuất của @ adam và sử dụng các mẫu trang hoặc bạn có thể giữ tất cả mã tùy chỉnh của mình trong một giỏ và sau đó móc / lọc vào các phần khác nhau của WordPress. Tôi muốn nói tất cả và tất cả, chọn những gì tốt nhất cho bạn và những gì bạn cảm thấy thoải mái. Tất cả ba câu trả lời này sẽ thực hiện những gì bạn muốn ở dạng này hay dạng khác.
hsatterwhite

1

Nếu bạn không muốn đối phó với API WordPress, thì câu trả lời của Adam thực sự là câu trả lời hay nhất.

Nếu bạn sẵn sàng đối phó với API, tôi sẽ khuyên bạn nên móc vào hook "chuyển hướng mẫu", điều này sẽ cho phép bạn trỏ một URL hoặc trang cụ thể vào một tệp PHP tùy ý trong khi vẫn có quyền truy cập vào WordPress.


1

Câu trả lời được chấp nhận rộng rãi bởi Adam Hopkinson không phải là một phương pháp hoàn toàn tự động để tạo một trang! Nó yêu cầu người dùng tạo thủ công một trang trong back-end của WordPress (trong dấu gạch ngang wp-admin). Vấn đề với điều đó là, một plugin tốt nên có một thiết lập hoàn toàn tự động. Nó không nên yêu cầu khách hàng tự tạo các trang.

Ngoài ra, một số câu trả lời được chấp nhận rộng rãi khác ở đây liên quan đến việc tạo một trang tĩnh bên ngoài WordPress, sau đó chỉ bao gồm một số chức năng của WordPress để đạt được tiêu đề và chân trang theo chủ đề. Mặc dù phương pháp đó có thể hoạt động trong một số trường hợp, nhưng điều này có thể khiến việc tích hợp các trang này với WordPress trở nên rất khó khăn mà không bao gồm tất cả chức năng của nó.

Tôi nghĩ cách tiếp cận tốt nhất, hoàn toàn tự động sẽ là tạo một trang bằng cách sử dụng wp_insert_postvà để nó nằm trong cơ sở dữ liệu. Một ví dụ và một cuộc thảo luận tuyệt vời về điều đó, và cách ngăn chặn việc vô tình xóa trang của người dùng, có thể được tìm thấy ở đây: wordpress-tự động tạo trang

Thành thật mà nói, tôi ngạc nhiên khi phương pháp này đã không được đề cập như một câu trả lời cho câu hỏi phổ biến này (nó đã được đăng trong 7 năm).


1
Ngay sau khi tôi viết câu trả lời trên, tôi nhận ra rằng mục đích của người dùng là có thể đưa PHP vào nội dung của trang, cách tiếp cận này rõ ràng không cho phép điều đó; PHP chỉ có thể được sử dụng để tạo nội dung, không được đưa vào nội dung, do đó trang sẽ được lưu tĩnh thay vì động. Tuy nhiên, bạn có thể cung cấp cho trang một diện mạo động bằng cách tạo lại trang và nội dung của nó (bằng cách cung cấp ID trang) mỗi lần nó được gọi. Plugin của bạn sẽ xử lý khi nào và làm thế nào điều này xảy ra, có lẽ bằng cách theo dõi $ _SERVER ["REQUEST_URI"]
Damian Green

2
Trong câu trả lời của bạn, bạn nói về việc ngăn chặn việc xóa ngẫu nhiên của người dùng. Làm thế nào để bạn làm điều đó?
GJ

0

Thử cái này:

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

0

Ngoài việc tạo tệp mẫu tùy chỉnh và gán mẫu đó cho một trang (như trong ví dụ trong câu trả lời được chấp nhận), còn có một cách với quy ước đặt tên mẫu mà WordPress sử dụng để tải mẫu (phân cấp mẫu).

Tạo một trang mới và sử dụng slug của trang đó cho tên tệp mẫu (tạo một tệp mẫu có tên page- {slug} .php ). WordPress sẽ tự động tải mẫu phù hợp với quy tắc này.


0

Chỉ cần tạo một page-mytitle.phptệp vào thư mục của chủ đề hiện tại và từ Bảng điều khiển một trang "mytitle" .

Sau đó, khi bạn gọi trang bằng URL, bạn sẽ thấy trang-mytitle.php. Bạn phải thêm HTML, CSS, JavaScript, wp-loop, v.v. vào tệp PHP này ( page-mytitle.php).


0

Bạn có thể thêm bất kỳ tệp php nào trong thư mục chủ đề đang hoạt động của mình như (/ wp-content / Themes / your_active_theme /) và sau đó bạn có thể đi thêm trang mới từ wp-admin và chọn mẫu trang này từ tùy chọn mẫu trang.

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

Và có một cách khác như bạn có thể đưa tệp của mình vào hàm.php và tạo shortcode từ đó và sau đó bạn có thể đặt shortcode đó vào trang của mình như thế này.

// CODE in functions.php 

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

Và sau đó bạn có thể sử dụng mã ngắn này trong trang bên wp-admin như thế này [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

Bạn có thể đặt tên tệp của mình là "newpage.php" - đặt nó vào thư mục chủ đề của bạn wp-content. Bạn có thể biến nó thành một mẫu trang (xem http://codex.wordpress.org/Pages .. ) Hoặc bạn có thể đưa nó vào một trong các tệp PHP trong chủ đề của bạn, chẳng hạn như header.php hoặc single.php.

Thậm chí tốt hơn, tạo một chủ đề con và đặt nó vào đó, để bạn để lại mã chủ đề của mình và việc cập nhật sẽ dễ dàng hơn.

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


Liên kết bị hỏng một nửa: Nó chuyển hướng hai lần và không có phần phụ nào có tên "Tạo mẫu trang riêng của bạn" . Gần nhất có thể hoặc không thể là phần phụ " Mẫu trang ". Ngoài ra còn có trang riêng (cùng tên) Mẫu trang
Peter Mortensen

-5

Bạn cũng có thể trực tiếp sử dụng trang PHP, như để tạo trang PHP và chạy với đường dẫn đầy đủ.

Giống như, http: //localhost/path/filename.php


Nhưng chức năng dịch không hoạt động, vì một số lý do, nó sẽ không được tải.
ram4nd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.