WordPress Integration in Yii Projekt


Wenn man einen WordPress Blog in das Yii Framework intgrieren will und das Layout der Seite behalten will, bietet WordPress die Möglichkeit, die WordPress API zu benutzen ohne ein Theme erstellen zu müssen.

Der Blog/News Bereich soll unter der Adresse: foo.com/news/ erreichbar sein.

WordPress hochladen

WordPress kann wie gewohnt installiert werden und sollte in der Ordner-Hierachie in folgendes Verzeichnis auf selbr Ebene, wie das Yii-Projekt entpackt werden:

yii-project
  assets
  protected
wordpress

Als Datenbank sollte die selber benutzt werden, wie das Yii-Projekt und alle Worpdress-Tabellen sollten ein Prefix erhalten (standardmäßig “wp_” in der wp-config).

Nachdem man die wp-config angepasst hat, muss noch das Routing von Yii angepasst werden vor der Installation von WordPress.

Yii Controller anlegen

Nun muss ein Controller angelegt werden, der nur die API aktiviert und das Autoloading von Yii deaktiviert, um den WordPress-Autoloader nicht zu behindern.

NewsController.php:

class NewsController extends Controller
{
    public function actionIndex()
    {
       $this->loadWordpress();
        $this->render("index");
    }
    public function actionShowArtikel()
    {
        $this->loadWordpress();
        $this->render("artikel");
    }
    private function loadWordpress(){
        // Include WordPress
        spl_autoload_unregister(array('YiiBase','autoload'));
        define('WP_USE_THEMES', false);
        global $wp, $wp_query, $wp_the_query;
        require('../wordpress/wp-blog-header.php');
        spl_autoload_register(array('YiiBase','autoload'));
    }
}

Es kann eine News-Startseiten-View angelegt werden unter views/news/index.php

while ( have_posts() ) {
    the_post();
    ?>

    <article>
        <header>
            <h1><?php the_title(); ?></h1>
        </header><!-- .entry-header -->

        <div>
            <?php the_excerpt() ?>
        </div><!-- .entry-content -->
        <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>
    </article>

<?php
}

und eine View für die Artikel-Detail-Seiten: artikel.php

while ( have_posts() ) {
    the_post();
    ?>

    <article>
        <header>
            <h1><?php the_title(); ?></h1>
        </header><!-- .entry-header -->

        <div>
           <?php the_content() ?>
        </div><!-- .entry-content -->
    </article>

<?php
}

Es muss nur noch das Routing angepasst werden unter Yii in der main.php:

        'urlManager' => array(
            'urlFormat' => 'path',
            'urlSuffix' => '/',
            'rules' => array(
                'news' => 'news/index',
                'news/<postname>-<post_id>' => 'news/showArtikel',

WordPress installieren

Danach kann WordPress durch das Aufrufen von foo.com/news/ installiert werden und auch die Post-Detail-Seiten funktionieren.

Es ist wichtig, dass im WordPress Backend unter Einstellungen/allgemein die URLs wie folgt konfiguriert werden:

WordPress-Adresse (URL): http://192.192.192.192/wordpress
Seiten-Adresse (URL): http://foo.com/news

Damit die Admin-Oberfläche noch erreichbar ist über http://192.192.192.192/wordpress/wp-admin/.

Danach kann WordPress installiert werden. Es müssen noch die Permalinks angepasst werden, wenn der Code 1 zu 1 übernommen werden soll:

/%postname%-%post_id%/

Beispiel-Anwendung, bei der WordPress in eine Yii-Anwendung integriert wurde: http://city-checkers.de/news