我有几个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过滤器。我是这样做的:我在我的主题文件夹page-custom.php中复制了page.php,其中
get_header();
调用注释掉,并在顶部插入模板名称:Custom我在主题文件夹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');
我创建了一个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函数中可用,但无济于事。
我欢迎任何关于如何实现这一目标的建议,我愿意接受其他解决方案来完成这项工作。
我已经解决了这个问题。我是这样做的:
-
我创建了一个页面模板,基于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');
-
我基于Divi主题的header.php创建了一个标题模板,名为header-custom.php,其中我用以下行替换了
<title><?php elegant_titles(); ?></title>
行:<?php add_filter( 'wp_title', 'set_custom_title' ); ?> <title><?php wp_title(); ?></title>
我使用上面创建的模板创建了一个空白的WordPress页面。