如何将PHP页面添加到WordPress?
I want to create a custom page for my WordPress blog that will execute my PHP code in it, whilst remaining a part of the overall site CSS/theme/design.
The PHP code will make use of 3rd party APIs (so I need to include other PHP files)
How do I accomplish this?
N.B. I do not have a specific need to interact with the Wordpress API - apart from including certain other PHP libs I need I have no other dependencies in the PHP code I want to include in a WP page. So obviously any solution that didn't require learning the WP API would be the best one.
我想为我的WordPress博客创建一个自定义页面,该页面将执行我的PHP代码,同时保留一部分 整个网站CSS /主题/设计。 p>
PHP代码将使用第三方API(所以我需要包含其他PHP文件) p> 我如何做到这一点? p>
NB 我没有特别需要与Wordpress API交互 - 除了包括我需要的某些其他PHP库我在PHP代码中没有其他依赖项我想要包含在WP页面中。 显然,任何不需要学习WP API的解决方案都是最好的。 p> div>
You don't need to interact with the API or use a plugin.
First, duplicate post.php
or page.php
in your theme folder (under /wp-content/themes/themename/
).
Rename the new file as templatename.php
(where templatename is what you want to call your new template). To add your new template to the list of available templates, enter the following at the top of the new file:
<?php
/*
Template Name: Name of Template
*/
?>
You can modify this file (using PHP) to include other files or whatever you need.
Then create a new page in your WordPress blog, and in the page editing screen you'll see a Template dropdown in the Attributes widget to the right. Select your new template and publish the page.
Your new page will use the PHP code defined in templatename.php
You will want to take a look in to WordPress' plugin API. This explains how to "hook" and "filter" in to different parts of the WordPress mechanics, so you can execute custom PHP code pretty much any where at any given time. This hooking, filtering, and custom code authoring can all take place in your functions.php file in any of your themes. Happy coding :)
If you don't want to deal with WP API, then Adam's answer is really the best one.
If you were willing to deal with the API I would suggest hooking into the "template-redirect" hook, which would allow you to point a particular URL or page to an arbitrary PHP file while still having access to the WP.
If you're like me, sometimes you want to be able to reference WordPress functions in a page which does not exist in the CMS. This way, it remains backend specific and cannot be accidentally deleted by the client.
This is actually simple to do just by including the wp-blog-header.php
file using a php require()
.
Here's an example that uses a query string to generate Facebook OG data for any post.
Take the example of a link like http://example.com/yourfilename.php?1
where 1
is the ID of a post we want to generate OG data for:
Now in the contents of yourfilename.php
which, for our convenience, is located in the root WP directory:
<?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>
There you have it: generated sharing models for any post using the post's actual image, excerpt and title!
We could have created a special template and edited the permalink structure to do this, but since it's only needed for one page and because we don't want the client to delete it from within the CMS, this seemed like the cleaner option.
EDIT 2017: Please note that this approach is now deprecated
For WP installations from 2016+ please see https://stackoverflow.com/a/39800534/1958998 for extra parameters to include before outputting your page data to the browser.
Apart from creating a custom template file and assigning that template to a page ( like in the example in accepted answer ), there is also a way with template naming convention that Wordpress uses for loading templates ( template hierarchy ). Create a new page and use the slug of that page for template filename ( create template file named page-{slug}.php ). WordPress will automatically load the template that fits to this rule.
You can also directly use the php page, like to create the php page and run with full path. like, http://localhost/path/filename.php
You can name your file newpage.php - put it in your theme directory in wp-content. You can make it a page template (see http://codex.wordpress.org/Pages...) or you can include it in one of the php files in your theme, such as header.php or single.php. Even better, create a child theme and put it in there, so you leave your theme code alone and it's easier to update.
http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates
Creating the template page is the correct answer, for this just add this into the page you created inside the theme folder
<?php
/*
Template Name: mytemplate
*/
?>
For running this code , you need to select mytemplate as template of the page from the back end
please see this link for to get the correct details https://developer.wordpress.org/themes/template-files-section/page-template-files/page-templates/.
If you wanted to create your own .php file and interact with Wordpress without 404 Headers and keeping your current permalink structure there is NO Need for a Template file for that 1 page, I found that this approach works best, in your .php file:
<?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();
?>
Than you can simply perform any wordpress functions after this. Also, this assumes that your .php file is within the root of your wordpress site where your wp-config.php
file is located.
This, to me, is a PRICELESS discovery as I was using require_once(dirname(__FILE__) . '/wp-blog-header.php');
for the longest time as Wordpress even tells you that this is the approach that you should use to integrate Wordpress Functions, cept, it causes 404 headers, which is weird that they would want you to use this approach. https://codex.wordpress.org/Integrating_WordPress_with_Your_Website
I know many people have answered this question and it already has an accepted answer, but here is a nice approach for a .php file within the root of your wordpress site (or technically anywhere you want in your site), that you can browse to and load without 404 Headers!
EDIT
Just a quick update here. There is a way to use wp-blog-header.php
without 404 headers, but this requires that you add in the headers manually, something like this will work in the root of your wordpress install:
<?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();
?>
Just to update you all on this, a little less code needed for this approach, but it's up to you on which 1 you use.
<?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(); ?>
Try this:
/**
* The template for displaying demo page
*
* template name: demo template
*
*/
The widely accepted answer by Adam Hopkinson is not a fully automated method of creating a page! it requires a user to manually create a page in the back-end of WordPress (in the wp-admin dash). The problem with that is, a good plugin should have a fully automated setup, it should not require clients to manually create pages.
Also, some of the other widely accepted answers here involve creating a static page outside of WordPress, which then include only some of the WordPress functionality to achieve the themed header and footer. While that method may work in some cases, this can make integrating these pages with WordPress very difficult without having all its functionality included.
I think the best, fully automated, approach would be to create a page using wp_insert_post
and have it reside in the database. An example and a great discussion about that, and how to prevent accidental deletion of the page by a user, can be found here: wordpress-automatically-creating-page
Frankly, I'm surprised this approach hasn't already been mentioned as an answer to this popular question (it has been posted for 7 years).
Rename the new file as templatename.php (where templatename is what you want to call your new template). To add your new template to the list of available templates, enter the following at the top of the new file:
You can modify this file (using PHP) to include other files or whatever you need.
Then create a new page in your WordPress blog, and in the page editing screen you'll see a Template dropdown in the Attributes widget to the right. Select your new template and publish the page.
Any answer did not cover if you need to add a PHP page outside of the WordPress Theme. This is the way.
You need to include wp-load.php.
<?php require_once('wp-load.php'); ?>
Then you can use any WordPress function on that page.
Create a page call it my-page.php and save it under your theme directory. Now, edit this php file and write the following line at the top of the page
<?php /* Template Name: My Page */ ?>
Write your PHP code under the custom page definition line, you can call your other WP template, functions inside this file.
Start like
<?php require_once("header.php");?>
OR
whatever way you are integrating your header and footer to keep the layout consistent.
Since this is a my page, you NEED TO CREATE A PAGE from WordPress admin panel. Go to Admin => Pages => Add New
Add a page title, depending upon how you have coded the custom page, you might add page body (description) as well. You can fully skip the description if it’s written in the custom php page.
At right hand side, select Template. Choose My Custom Page from the dropdown. You are all set! Go to the slug (permalink) created by [wordpress][1] and see the page.
just create a page-mytitle.php to the folter of current theme, and from the Dashboard a page mytitle. Then when you invoke the page by the url you are going to see the page-mytitle.php. You must add htmp, css, js wp-loop e.t.c to this php file (page-mytitle.php)
You can create the template in Theme Folder than after place your php code in that template file.If You will be required some files for that than you can include that files in that template.See below.
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();
The best way to add PHP pages in WordPress to Page Template
in the child-theme
folder.
How to create Page Template
in WordPress.
Create a file named template-custom.php
and put it in /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(); ?>