Ich muss jetzt eine Kohana 3-Site mit einem WordPress-Blog versehen.
Ich habe Kerkness gesehen Kohana für WordPressaber es scheint das Gegenteil von dem zu sein, was ich will.
Hier sind die Optionen, an die ich gedacht habe
- Gestalten Sie eine Vorlage so, dass sie genau wie die Kohana-Site aussieht (zeitaufwändig, nicht DRY und funktioniert möglicherweise nicht)
- Fügen Sie den Blog in eine ein
iframe
(hässlich wie die Hölle)
- cURLen Sie die WordPress-Seiten ein. Das bedeutet natürlich, dass ich Ebenen zwischen dem Posten von Kommentaren usw. erstellen muss, was sich nach zu viel Arbeit anhört.
Gibt es eine Möglichkeit, einen WordPress-Blog in eine vorhandene Kohana-Anwendung einzubinden? Haben Sie Vorschläge?
ich fand Dieser Beitrag beschreibt das Kohana für WordPress-Pluginaber ich bin immer noch verwirrt, wie es funktioniert.
Bedeutet das, dass ich innerhalb von WordPress einen Kohana-Controller anrufen kann? Hilft mir das in meiner Situation?
Oh, das habe ich vor langer Zeit gemacht (eigentlich gegen Ende letzten Jahres).
Annahmen
- Sie verwenden WordPress-Permalinks mit mod_rewrite oder einer ähnlichen Option.
- Sie haben register_globals() nicht eingeschaltet. Schalten Sie es aus, um sicherzustellen, dass die globalen Variablen von WordPress nicht von Kohana entfernt werden.
Umbenennung
Zuerst müssen Sie die umbenennen __()
Funktion in Kohana. Sagen Sie, Sie benennen es um __t()
. Sie müssten es überall dort ersetzen, wo es erscheint, was ziemlich einfach ist, wenn Sie einen Editor wie Netbeans verwenden, der Verwendungen einer Funktion oder Methode finden kann.
Hierarchie
Die nächste Entscheidung, die Sie treffen müssen, ist, ob Sie WordPress in Kohana oder Kohana in WordPress laden möchten. Ich bevorzuge letzteres, das ich unten dokumentiere. Letzteres könnte ich dokumentieren, wenn Sie diesen Weg bevorzugen.
Ich habe das Kohana-Verzeichnis in mein Themenverzeichnis gelegt.
Einfach in deiner functions.php-Datei deines Themes
include TEMPLATEPATH . '/kohana/index.php';
Kohana-Konfiguration
Die index.php-Datei Ihres Kohana benötigt ebenfalls etwas Arbeit. Entfernen Sie die Zeilen, die nach install.php suchen, während sie geladen werden ABSPATH . WPINC . 'install.php'
stattdessen und zeigen Sie eine Fehlermeldung in Ihrem WordPress-Adminbereich an. Sie müssen auch das error_reporting ändern, da WordPress im Moment E_STRICT fehlschlägt.
Sie müssen sehr wahrscheinlich die letzten paar Zeilen Ihres Bootstrap (in Kohana) entfernen, die die Anfrage verarbeiten, und Ihre Init ändern:
Kohana::init(array(
'base_url' => get_bloginfo('home') . "https://stackoverflow.com/",
'index_file' => '',
));
Fügen Sie entweder in Ihrer WordPress-Datei functions.php oder in Ihrem Bootstrap diese Zeilen hinzu:
remove_filter('template_redirect', 'redirect_canonical');
add_filter('template_redirect', 'Application::redirect_canonical');
wo Anwendung ist eine Klasse deiner Wahl.
Mein Code für die Anwendung Klasse (ohne die Klassendefinition) ist:
public static function redirect_canonical($requested_url=null, $do_redirect=true)
{
if (is_404() && self::test_url())
{
echo Request::instance()->execute()->send_headers()->response;
exit;
}
redirect_canonical($requested_url, $do_redirect);
}
public static function test_url($url = NULL)
{
if ($url === NULL)
{
$url = str_replace('?'.$_SERVER['QUERY_STRING'], '', $_SERVER['REQUEST_URI']);
$url = trim($url, "https://stackoverflow.com/");
}
foreach (Route::all() as $route)
{
/* @var $route Route */
if ($params = $route->matches($url))
{
$controller="controller_";
if (isset($params['directory']))
{
// Controllers are in a sub-directory
$controller .= strtolower(str_replace("https://stackoverflow.com/", '_', $params['directory'])).'_';
}
// Store the controller
$controller .= $params['controller'];
$action = Route::$default_action;
if (isset($params['action']))
{
$action = $params['action'];
}
if (!class_exists($controller))
return false;
if (!(method_exists($controller, 'action_' . $action) || method_exists($controller, '__call')))
return false;
return true;
}
}
return false;
}
wodurch WordPress die Umleitung für jede Seite, die sich möglicherweise verschoben hat, durchführen kann, z /über/kalender zu /Kalender solange du keine hast Über Controller u Kalender Aktion definiert.
Da haben Sie es also. Alle URLs, die nicht in WordPress definiert sind, fallen auf Ihren definierten Controller (oder verwenden Sie die 404-Vorlage Ihres Themas).
Zusätzlich
Dies ist nicht erforderlich, aber Sie können die header.php Ihres Designs in Ihrem Kohana-Views-Ordner (Anwendung oder in einem Modul) und aus einer Ihrer Designdateien ablegen
echo View::factory('header')
Sie könnten dasselbe mit Ihrer Fußzeile (oder anderen Dateien für diese Angelegenheit) tun. In Ihrer header.php könnten Sie auch Folgendes tun:
if (isset($title)) echo $title; else wp_title(YOUR_OPTIONS);
Auf diese Weise könnten Sie in Ihrem Controller
echo View::factory('header')->set('title', 'YOUR_TITLE');
Um URLs konsistent zu halten, müssen Sie möglicherweise das / vom Ende der WordPress-Permalinks entfernen /%year%/%monthnum%/%day%/%postname%/ wird /%year%/%monthnum%/%day%/%postname%etc
Bitte lassen Sie mich wissen, wenn Sie weitere Hilfe bei der Integration von WordPress und Kohana benötigen.
Ich habe WordPress tatsächlich für das CMS einer Code-Igniter-Site verwendet. Dies ist die Methode, die ich zum Abrufen von Seiteninhalten verwendet habe, nicht von Blog-Inhalten, aber vielleicht können Sie sie ein wenig an Ihre Bedürfnisse anpassen.
In meinem Front-Controller habe ich die WordPress-Header-Datei hinzugefügt
require('/path/to/wp-blog-header.php');
Dadurch erhalten Sie Zugriff auf die 2 Funktionen, die Sie benötigen
get_page() – Get the page data from the database
wpautop() – Automatically add paragraph tags to page content
Um Seitendaten zu erhalten
$page_data = get_page( 4 ); // Where 4 is the page ID in wordpress
Wenn Sie diesen Fehler erhalten:
Schwerwiegender Fehler: Nur Variablen können per Referenz übergeben werden…
Du musst es so machen
$page_id = 4;
$page_data = get_page( $page_id );
aufgrund einer Insekt in bestimmten Versionen von php
Dann in der Ansicht
<?= wpautop($page_data->post_content) ?>
Hoffe das hilft
BEARBEITEN
Ich habe WordPress unter /blog im Dateisystem installiert. WordPress läuft also eigentlich ganz normal als Blog. Ich verwende diese Methode nur, um die Seiten zu greifen
Das wird aufgrund der Funktionsweise von WordPress extrem schwierig. Insbesondere werden überall globale Variablen verwendet, und da Kohana bereichsabhängig ist, können Sie nicht auf diese Variablen zugreifen.
Lange Rede kurzer Sinn: Was Sie wollen, ist fast unmöglich. Wenn Sie es jedoch zum Laufen bringen (ohne WP zu hacken), wäre ich wirklich daran interessiert zu sehen, wie Sie es gemacht haben.
Eine andere Lösung besteht darin, sowohl WordPress- als auch Kohana-Installationen vollständig getrennt zu halten. Dann erstellen Sie ein benutzerdefiniertes WordPress-Design, das die Kopf- und Fußzeile aus Kohana zieht (Sie können dafür einen Kohana-Controller erstellen).
Sobald Sie die Kopf- und Fußzeile eingefügt haben, sieht der Blog in Ihre Website integriert aus, obwohl es immer noch eine völlig separate Installation ist. Der Vorteil ist, dass weder WordPress noch Kohana gehackt werden müssen, damit es funktioniert.
In diesem Blogbeitrag finden Sie weitere Details zu dieser Methode: Integration von WordPress in eine Kohana-Anwendung
Ich dachte immer, das wäre relativ einfach. Das heißt, WordPress als Back-End Ihrer Website zu verwenden (zumindest für den Blog-Teil) und Kohana zum Bereitstellen von Beiträgen und Seiten zu verwenden. Wenn ich mich nicht irre, müssten Sie lediglich Ihre Modelle (Beitrag, Kommentar, Seite) so einrichten, dass sie ihre Daten aus der WordPress-Datenbank (mit oder ohne ORM) anstelle einer neuen sammeln.
Hallo Alex, können Sie bitte diese SO-Frage auf stackoverflow.com/questions/20934551/… überprüfen, die sich auf den Zugriff auf Kohana-Anwendungsdaten in WordPress bezieht. Danke
– Benutzer2681579
6. Januar 2014 um 6:56 Uhr