【发布时间】: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 过滤器。这是我所做的:
我在名为 page-custom.php 的主题文件夹中制作了 page.php 的副本,其中
get_header();调用已被注释掉并带有 模板名称:自定义插入顶部。-
我在名为 header-custom.php 的主题文件夹中制作了 header.php 的副本,并将以下代码行插入到
<head>部分:<?php add_filter( 'wp_title', 'set_custom_title' ); ?> -
我在brand_details.php中添加了以下代码:
function set_custom_title($data) { return "$brand_name Details Page"; } get_header('custom'); 我基于调用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 函数中可用,但无济于事。
我欢迎任何关于如何实现这一目标的建议,并且我愿意接受替代解决方案来完成工作。
【问题讨论】: