2016-05-03 4 views
1

Перед тем, как попасть на этот вопрос, позвольте мне сказать, что я видел подобный вопрос здесь с довольно подробным ответом:Как я могу вытащить верхний и нижний колонтитулы Wordpress в виде Laravel?

https://wordpress.stackexchange.com/questions/115211/loading-wordpress-stuff-on-laravel-site

И это было ближе всего я нашел в Интернете, что я» м, но потенциальное решение выглядело так, будто это может оказаться настолько трудоемким, что не стоит того времени. Вот моя ситуация:

Я разрабатываю и поддерживаю небольшую пользовательскую программу SaaS, которая обычно функционирует на поддомене клиентского сайта (скажем, software.client.com). Последняя версия кода была переписана с использованием Laravel, и с этим связано много преимуществ. Раньше, когда программа была в основном процедурной спагетти, если у нас был клиент с сайтом Wordpress в их основном домене, мы запускали какой-то жестокий (по стандартам лучших практик) код взлома, чтобы вытащить верхний и нижний колонтитулы Wordpress на страницы моей программы - сидя, конечно, вне CMS - при изменении мета-тегов и выполнении ряда других вещей. Это было некрасиво, но это сработало.

Сейчас я нахожусь в ситуации, когда я хотел бы решить ту же проблему - то есть, по крайней мере, тянуть Wordpress верхние и нижние колонтитулы на некоторые мнения Laravel субдомена - но я ничего не нашел на сеть до сих пор позволила мне добиться значительного прогресса в этом направлении. Я нашел много учебников, объясняющих, как интегрировать Laravel и Wordpress, или использовать один для интерфейса, а другой для бэкэнд и т. Д., Но еще ничего о конкретном типе интеграции, о котором я говорю.

То, что я пробовал до сих пор, реализует часть кода, который я использовал в других местах в различных частях кодовой базы Laravel. Большинство недавних экспериментов были в public/index.php и в методах контроллера. Laravel позволит мне дойти до версии Wordpress, но если я попытаюсь пойти дальше, я вызову ошибку 500. Вот пример фрагмента, который на самом деле пытается сделать больше, чем мне нужно, но я не могу даже пройти мимо wp_init(). Представьте следующий код в методе Laravel Controller. Первые две строки в порядке, но:

public function index() { 
    define('WP_USE_THEMES', false); 
    require '/path_to/wp-config.php'; 
    $wp->init();      // from here on, 500 errors occur 
    $wp->parse_request(); 
    $wp->query_posts(); 
    $wp->register_globals(); 

    // And then, at some point, I would call and modify get_header() 

(я не ожидал этого, чтобы работать от контроллера, но он не работает с нигде в коде я попытался либо.) Это не является ситуацией, когда я хочу передать контроль с Laravel на Wordpress для этих URL-адресов (мне нужны функции Laravel/DB и большая гибкость, и я знаю, что могу просто выполнить эту передачу через public/index.php и маршруты. php, если это решит проблему). И для этих инсталляций мне не нужно захватывать сообщения или другие предметы из Wordpress. Я просто хотел бы найти способ поднять заголовок и нижний колонтитул в эти виды непосредственно из Wordpress, сохраняя при этом контроль над видами в Ларавеле. Если я не могу, помимо прочего, команда разработчиков закончит перестраивать верхние и нижние колонтитулы для каждой установки программы на клиенте Wordpress (пока), и им придется внести изменения, по крайней мере, в два места, когда все будет изменено или обновлено.

Если нам нужно, мы найдем способ жить с ним до следующей версии программы, но если я смогу построить решение в том, что мои начальники сочтут разумным временем, мы все будем счастливее. Надеюсь, что я просто что-то пропустил, и мне будет стыдно узнать, что я мог бы решить это за меньшее время, чем потребовалось, чтобы объяснить проблему. Благодарим вас за любые полезные ответы и возможные решения.

ответ

0

Вы не сможете полностью объединить две кодовые базы. Это может привести к катастрофе.

Сложность решения зависит от сложности информации, которую необходимо предоставить. Простейшим возможным решением было бы написать что-то пользовательское для WordPress, которое строит документ без данных тела и просто поставляет токен, например {!! $body !!}. Затем в Laravel вы можете выполнить HTTP-запрос на localhost для получения этого токенированного содержимого. Сохраните результат в кеше памяти и используйте Blade для отображения окончательного вида.

По существу, мое предложение сводится к: Создайте макет Blade с помощью WordPress.

Существует много разных способов сделать это, и все они ошибаются.