【问题标题】:Struggling to set page titles for dynamic PHP pages in a WordPress site努力为 WordPress 网站中的动态 PHP 页面设置页面标题
【发布时间】:2015-08-17 05:38:12
【问题描述】:

我有几个 PHP 页面想要出现在 WordPress 网站上。

我正在使用 Allow PHP in Posts and Pages 插件,并使用以下代码添加 WordPress 页面:

[php]include $_SERVER['DOCUMENT_ROOT'] . '/brand_details.php';[/php]

我这样做是因为我希望解决方案尽可能便携(所以我不想编辑 functions.php,它可能会在下一次 WordPress 更新中被覆盖),我希望它是相对非技术性的 WordPress 人员可以理解的东西。

它适用于大多数页面,但我正在努力处理内容取决于 URL 参数的页面。特别是,在这种情况下,我很难设置页面标题。

例如,我有一个名为 brand_details.php 的页面,其中显示了品牌的详细信息(名称、地址、网站等)。

使用 URL 参数调用,例如 ?brand_url=acehardware

通过该参数,我在 MySQL 表中查找品牌详细信息并显示结果。

这工作正常,但我丢失了 WordPress 页眉和页脚。为了解决这个问题,我尝试将以下代码添加到我的 PHP 页面的开头和结尾:

一开始:

require $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php';
get_header();

最后:

get_footer();

这有点奏效,虽然我遇到了几个样式问题 - 但这可能与我正在使用的主题(即 Divi)有关。

但我不能在页面标题中显示品牌名称。要使用上面的示例,我想显示一个标题,例如“Ace Hardware Brand Details”。这显然需要根据所选品牌进行更改。

所以我的下一步是去掉这段代码并尝试使用 wp_title 过滤器。这是我所做的:

  1. 我在名为 page-custom.php 的主题文件夹中制作了 page.php 的副本,其中 get_header(); 调用已被注释掉并带有 模板名称:自定义插入顶部。

  2. 我在名为 header-custom.php 的主题文件夹中制作了 header.php 的副本,并将以下代码行插入到 <head> 部分:

    <?php add_filter( 'wp_title', 'set_custom_title' ); ?>
    
  3. 我在brand_details.php中添加了以下代码:

    function set_custom_title($data)
    {
     return "$brand_name Details Page";
    }
    get_header('custom');
    
  4. 我基于调用brand_details.php页面的自定义页面模板创建了一个WordPress页面。

我希望页面显示为标准的 WordPress 页面,但页面标题是根据所显示的品牌设置的。

实际发生的情况是 WordPress 的页眉和页脚正常显示,但 set_custom_title 函数没有使用上面提到的 $brand_name 变量,因此页面标题最终成为没有品牌名称的“详细信息页面”。

在调用此函数之前,我在其中查找品牌名称的(为便于阅读而简化)代码如下:

$brand_url = $_REQUEST["brand_url"];
$sql = "SELECT * FROM brand_details WHERE brand_url = '$brand_url' LIMIT 1";
$stmt = $db_conn->prepare($sql);
$stmt->execute(array());
$row = $stmt->fetch();
$brand_name = $row['brand_name'];

我知道这是可行的,因为我在主页中使用了结果。

我尝试将最后一行修改为 global $brand_name = $row['brand_name'];,希望 $brand_name 变量在 set_custom_title 函数中可用,但无济于事。

我欢迎任何关于如何实现这一目标的建议,并且我愿意接受替代解决方案来完成工作。

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    我已经解决了这个问题。我是这样做的:

    1. 我基于 Divi 主题的 page.php 创建了一个页面模板,名为 page-brand_details.php,并将我的 php 页面中的代码添加到其中。我还从一开始就删除了get_header();,并在最后添加了以下代码:

      function set_custom_title($data) { global $brand_name; return $brand_name." Brand Details Page"; } get_header('custom');

    2. 我基于 Divi 主题的 header.php 创建了一个标题模板,名为 header-custom.php,其中我将 &lt;title&gt;&lt;?php elegant_titles(); ?&gt;&lt;/title&gt; 行替换为以下行:

      <?php add_filter( 'wp_title', 'set_custom_title' ); ?>
      <title><?php wp_title(); ?></title>
      
    3. 我使用上面创建的模板创建了一个空白的 WordPress 页面。

    【讨论】:

      猜你喜欢
      • 2022-10-06
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      • 2014-08-16
      相关资源
      最近更新 更多