У меня есть несколько страниц PHP, которые я хочу отобразить на сайте WordPress.
Я использую плагин « Разрешить PHP в сообщениях и страницах» и добавляю страницы WordPress с кодом, например:
[php]include $_SERVER['DOCUMENT_ROOT'] . '/brand_details.php';[/php]
Я делаю это так, потому что я хочу, чтобы решение было настолько портативным, насколько это возможно (поэтому я бы предпочел не редактировать functions.php, который может быть перезаписан в следующем обновлении WordPress), и я хочу, чтобы это было чем-то, что относительно нетехнические люди WordPress могут обойти свои головы.
Он работает достаточно хорошо с большинством страниц, но я борюсь со страницами, содержание которых зависит от параметра URL. В частности, я стараюсь установить заголовок страницы в этой ситуации.
Например, у меня есть страница с именем brand_details.php, которая отображает детали (имя, адрес, сайт и т. Д.) Brands.
Он вызывается с параметром URL, например: brand_url = acehardware
Из этого параметра я просматриваю данные бренда в таблице MySQL и показываю результаты.
Это работает нормально, но я теряю заголовок и нижний колонтитул WordPress. Чтобы обойти это, я попытался добавить следующий код в начало и конец моей страницы PHP:
В начале:
require $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php'; get_header();
В конце:
get_footer();
Этот вид работал, хотя я столкнулся с несколькими проблемами стиля – но, возможно, это связано с тем, что я использую (это Divi).
Но то, что я не могу сделать, это показать название бренда в названии страницы. Чтобы использовать приведенный выше пример, я хочу отобразить заголовок, например «Aware Hardware Brand Details». Очевидно, что это должно измениться в зависимости от выбранного бренда.
Поэтому мой следующий шаг состоял в том, чтобы удалить этот код и попробовать вместо этого использовать фильтр wp_title . Вот что я сделал:
Я сделал копию page.php в моей папке с темами, называемой page-custom.php, с помощью get_header();
вызов закомментирован и с именем шаблона: пользовательский вставлен вверху.
Я сделал копию header.php в своей папке темы с именем header-custom.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, поэтому название страницы оказалось «подробной страницей» без названия бренда.
Код (упрощенная для удобочитаемости), в котором я просматриваю название бренда, перед вызовом этой функции, выглядит следующим образом:
$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, но безрезультатно.
Я приветствую любые советы о том, как достичь этого, и я открыт для альтернативных решений, чтобы выполнить работу.