如何添加一个PHP页面到WordPress?

我想为我的WordPress博客创build一个自定义页面,它将执行我的PHP代码,同时仍然是整个网站CSS /主题/devise的一部分。

PHP代码将使用第三方API(所以我需要包括其他PHP文件)

我如何做到这一点?

NB我没有特别的需要与Wordpress API交互 – 除了包括某些其他的PHP库,我需要我没有其他的依赖关系,我想包括在WP页面的PHP代码。 所以显然任何不需要学习WP API的解决scheme都是最好的解决scheme。

您不需要与API交互或使用插件。

首先,在主题文件夹(在/wp-content/themes/themename/ )中重复post.phppage.php

将新文件重命名为templatename.php (其中templatename是您要调用新模板的位置)。 要将新模板添加到可用模板列表中,请在新文件顶部input以下内容:

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

你可以修改这个文件(使用PHP)来包含其他文件或任何你需要的。

然后在您的WordPress博客中创build一个新页面,在页面编辑屏幕中,您将在右侧的属性窗口小部件中看到一个模板下拉菜单。 select您的新模板并发布页面。

您的新页面将使用templatename.php定义的PHP代码

如果你想创build你自己的.php文件,并与Wordpress交互没有404头,并保持当前的永久链接结构没有需要一个页面的模板文件,我发现这种方法效果最好,在您的.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(); ?> 

在此之后,您可以简单地执行任何wordpressfunction。 此外,这假定您的.php文件是在您的wp-config.php文件所在的WordPress站点的根目录。

对我来说,这是一个PRICELESS发现,因为我正在使用require_once(dirname(__FILE__) . '/wp-blog-header.php'); 因为Wordpress甚至告诉你,这是你应该用来集成Wordpress函数的方法,因为它会导致404头,这很奇怪,他们会希望你使用这种方法。 https://codex.wordpress.org/Integrating_WordPress_with_Your_Website

我知道很多人已经回答了这个问题,它已经有了一个可以接受的答案,但是这里有一个很好的方法可以在你的WordPress站点的根目录下(或者技术上你想要的任何地方).php文件,你可以浏览并加载没有404头!

如果你像我一样,有时候你希望能够在CMS中不存在的页面中引用WordPress的function。 这样,它仍然是后端特定的,不能被客户意外删除。

这实际上很简单,只需通过使用php require()来包含wp-blog-header.php文件即可。

以下是一个使用查询string为任何post生成Facebook OG数据的示例。

http://example.com/yourfilename.php?1这样的链接为例,其中1是我们要为其生成OG数据的post的ID:

现在在yourfilename.php的内容中,为了方便起见,它位于根目录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> 

你有它:生成共享模型的任何职位使用职位的实际形象,节选和标题!

我们可以创build一个特殊的模板并编辑永久链接结构来完成这个任务,但是由于只需要一个页面,而且我们不希望客户端从CMS中删除它,所以这看起来就像是一个更简洁的选项。


编辑2017年: 请注意,这种方法已被弃用

对于从2016+开始的WP安装,请参阅https://stackoverflow.com/a/39800534/1958998 ,以获取在将页面数据输出到浏览器之前包含的额外参数。

创build模板页面是正确的答案,因为这只需将其添加到您在主题文件夹内创build的页面即可

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

为了运行这个代码,你需要从后端selectmytemplate作为页面的模板

请参阅此链接以获取正确的详细信息https://developer.wordpress.org/themes/template-files-section/page-template-files/page-templates/

你会想看看WordPress的插件API。 这解释了如何在WordPress机制的不同部分“挂钩”和“过滤”,因此您可以在任何时候执行自定义的PHP代码。 这个挂钩,过滤和自定义代码创作都可以在你的任何主题的functions.php文件中进行。 快乐编码:)

  • WordPress插件API
  • WordPress的钩子/过滤数据库
  • WordPress的PHPXHref由Yoast

亚当·霍普金森广泛接受的答案不是一个完全自动的创build页面的方法! 它需要用户在WordPress的后端(在wp-admin dash中)手动创build一个页面。 问题是,一个好的插件应该有一个完全自动化的设置,它不应该要求客户端手动创build页面。

此外,其他一些被广泛接受的答案涉及在WordPress之外创build一个静态页面,然后仅包含一些WordPressfunction来实现主题页眉和页脚。 虽然这种方法可能在某些情况下工作,但这可能会使这些页面与WordPress的集成变得非常困难,而没有包含所有的function。

我认为最好的,完全自动化的方法是使用wp_insert_post创build一个页面,并让它驻留在数据库中。 关于这个例子和一个很好的讨论,以及如何防止用户意外删除页面,可以在这里find: wordpress-automatically-creating-page

坦率地说,我很惊讶这种方法还没有被提及作为这个受欢迎的问题的答案(它已经发布了7年)。

如果你不想处理WP API,那么Adam的答案确实是最好的答案。

如果你愿意处理API,我会build议挂钩到“模板redirect”钩子,这将允许你指定一个特定的URL或页面到一个任意的PHP文件,同时仍然可以访问WP。

除了创build自定义模板文件并将该模板分配给页面(就像接受的答案中的例子),Wordpress用于加载模板(模板层次结构)的模板命名约定也是一种方法。 创build一个新的页面,并使用模板文件名的页面的slu ((创build名为page- {slug} .php的模板文件)。 WordPress会自动加载符合这个规则的模板。

尝试这个:

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

你可以命名你的文件newpage.php – 把它放在wp-content的主题目录中。 您可以将其设置为页面模板(请参阅http://codex.wordpress.org/Pages .. ),也可以将其包含在主题中的某个php文件中,例如header.php或single.php。 更好的是,创build一个儿童主题并放置在那里,这样你就可以将主题代码独立出来,而且更容易更新。

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

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

你也可以直接使用php页面,就像创buildphp页面并运行完整path一样。 像http://localhost/path/filename.php