在WordPress站点中为动态PHP页面设置页面标题时遇到困难


Struggling to set page titles for dynamic PHP pages in a WordPress site

我有几个PHP页面,我想出现在一个WordPress站点。

我正在使用允许PHP在Posts和Pages插件,并添加WordPress页面的代码,如:

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

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

它在大多数页面上工作得相当好,但我正在努力处理内容依赖于URL参数的页面。特别是,在这种情况下,我很难设置页面标题。

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

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

从该参数中,我在MySQL表中查找Brand详细信息并显示结果。

这工作正常,但我失去了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();调用注释掉,并在顶部插入模板名称:Custom

  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. 我创建了一个WordPress页面基于自定义页面模板调用brand_details.php页面

我希望这个页面能像一个标准的WordPress页面一样出现,但是页面标题要根据所显示的品牌来设置。

实际情况是,WordPress页眉和页脚显示正确,但上面提到的$brand_name变量没有被set_custom_title函数使用,所以页面标题最终是"Details page",没有品牌名称。

在调用这个函数之前查找品牌名称的代码(为了可读性而简化)如下:

$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函数中可用,但无济于事。

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

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

  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,其中我用以下行替换了<title><?php elegant_titles(); ?></title>行:

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