如何安排PHP文件以支持多种类型的页面?

时间:2014-09-09 作者:Thomas Russell

我是WordPress开发新手(我在网页设计/开发方面所做的最多的工作就是创建基本的HTML网站);所以这可能是一个非常简单的问题,但我正在尝试创建一个多页网站。

我想要3个静态页面,一个主页,关于页面和公文包页面,以及一个使用WordPress后端填充的博客。起初,我打算把博客放在一个单独的子域上(例如。blog.example.com), 然而,我希望在所有页面上填充一个最近帖子的列表,因此我希望将所有帖子保持在同一个域中。

但是,如果我把index.php, about.php, portfolio.phpblog.php 在主题文件夹中;这个index.php 如预期的那样显示,但是,如果我按如下方式创建链接,它将不起作用(所有hrefs是空白字符串):

<ul class="nav">
   <li><center><a id="nav_bar" href="<?php get_home_template() ?>">Home</a></center></li>
   <li><center><a id="nav_bar" href="<?php get_query_template(\'about\') ?>">About</a></center></li>
   <li><center><a id="nav_bar" href="<?php get_query_template(\'portfolio\') ?>">Portfolio</a></center></li>
   <li><center><a id="nav_bar" href="<?php get_query_template(\'blog\') ?>">Blog</a></center></li>
</ul>
如果我使用以下语法将链接指向wp content文件夹:

<a id="nav_bar" href="<?php bloginfo(\'template_url\') ?>/about.php">About</a>
链接被正确呈现,它指向wp content文件夹中的PHP文件,但当导航到该页面时,它无法调用WordPress函数(即。get_header() 找不到)。

实现我想做的事情的最佳方式是什么?

2 个回复
最合适的回答,由SO网友:Michael Ecklund 整理而成

您需要了解WordPress模板层次结构是如何工作的。

对于任何想学习WordPress或将当前WordPress经验提升到下一个层次的人来说,了解和理解WordPress模板层次结构的所有不同方面都是非常重要的。

如果您计划整合或组织WordPress网站上的内容,则必须了解WordPress网站如何处理到达并浏览WordPress网站的每个访问者的请求。

Here\'s a list of links which you should read from top to bottom:

  1. Theme Development
  2. Template Hierarchy
  3. Child Themes
  4. Conditional Tags
  5. Stepping into Templates
  6. The Loop in Action

      现在是02年款,关于您的特殊情况。。。

      在WordPress后端管理区域中创建静态空间(domain.com/wp-admin/). 给他们一个标题,如果想要更改页面的URL,请修改“slug”,并插入一些内容。

      请通读我之前的答案中的链接。然后回到这里。

      创建文件page.php 把它放进去./wp-content/themes/<your-theme/ 目录这将是您网站上所有“静态页面”的默认模板。

      现在,如果您想要为特定页面提供不同的功能或布局,您有几个选项。

      Option #1) 为每个不同的页面创建单独的文件。您可以通过创建一个名为page-<your-page-slug>.phppage-<your-page-ID>.php.

      Option #2) 在您的page.php 文件

      Example:

      if(is_page(\'about\')){// Page with slug of "about".
      
          // do stuff
      
      } elseif(is_page(28)){// Page with ID of "28".
      
          // do stuff
      
      } elseif(is_front_page()){// Home page of your website.
      
          // do stuff
      
      } else{// Any other page.
      
          // do stuff
      
      }
      
      现在,如果你打算或多或少地在布局中硬编码你的链接。。。考虑使用site_url();.

      示例:<a href="<?php echo site_url(\'/about/\'); ?>">About</a>

      您可以使用实际的页面信息进行操作。

      $page = get_post(28);
      if($page){
          echo \'<a href="\'.get_permalink($page->ID).\'">\'.$page->post_title.\'</a>\'.PHP_EOL;
      }
      
      现在如果你真的想变得花哨。。。你可以使用global variables. Globalling the current post object (可以是当前页)。

      if(is_page(\'about\')){// Page with slug of "about".
      
          global $post;
      
          echo \'<h1><a href="\'.get_permalink($post->ID).\'">\'.$post->post_title.\'</a></h1>\'.PHP_EOL;
      
      } 
      
      还应该注意的是,在设置站点的“博客部分”时,您应该查看WordPress后端管理部分中的阅读设置。WP Admin -> Settings -> Reading

      设置首页和帖子页面。帖子页面是您的博客所在的位置。index.php 是博客帖子的默认模板文件。您可以为博客的每个区域设置不同的模板。home.php 将是“主博客页面”的默认模板文件,category.php 将是您的所有博客帖子,这些帖子都有一个指定的类别。tag.php 将是您的所有博客帖子,这些帖子都有一个指定的标签。等

      关于这个话题,我不能太深入,因为一个答案中包含的信息太多了。以上链接在我前面的回答中都解释了这一点。我可以向您保证,如果您阅读并理解这些链接,您将很快找到解决方案。

SO网友:Domain

请参阅,如果您的文件只是简单的php文件(没有以任何方式连接到WordPress),那么WordPress函数将无法在这些文件中访问。如果要创建具有不同结构/布局的不同页面,应首先在主题/子主题中创建模板,从管理仪表板添加新页面,然后将创建的模板分配给它们-

1) 创建模板-http://codex.wordpress.org/Page_Templates

2) 从管理仪表板添加新页面-http://codex.wordpress.org/Pages_Add_New_Screen

3) 添加页面时,请从您创建的模板中选择模板。你可以通过他们的名字来识别他们。

如果您在PHP文件中添加了get\\u header()、get\\u footer(),这意味着您只尝试创建模板,但它们似乎没有正确加载为模板。有关更多详细信息,请参阅模板创建链接。请注意:创建模板时,不要忘记提供“模板名称”。您甚至可以将任何现有模板引用到主题中,只需复制粘贴它、重命名文件名和模板名、自定义布局以及分配给任何WordPress页面。

此外,当页面准备就绪时,您只需从仪表板本身向导航菜单添加主题即可http://codex.wordpress.org/WordPress_Menu_User_Guide

如果您不想创建任何新模板并使用主题中现有的模板,可以通过将它们分配到管理仪表板中的页面来直接使用它们。

结束

相关推荐

空白子主题-函数.php问题

我创建了一个子主题,并移动了父主题函数中的所有修改。php转换为子主题的函数。php。现在,如果我预览主题,它是空白的。我有三件事要做——更改云中显示的标签数量、隐藏产品类别和显示谷歌图书预览。我在这段代码中看不到任何错误,当它在父代码中时,它就会工作。如果有任何帮助,我将不胜感激,我完全被困住了!<?php function change_tag_cloud_widget() { $args[\'number\'] = 15; return $ar