WordPress – Neue Seiten/Beiträge automatisch erstellen

Ich hätte nie gedacht, dass ich das mal brauche, aber wie sagt man so schön: “Sag niemals nie”
Und zwar geht es darum, dass man WordPress irgendwie mitteilen soll, dass eine neue Seite bzw. ein neuer Artikel automatisch erstellt werden soll, sofern dieser noch nicht existiert. Ja, das ist durchaus möglich… Wozu aber braucht man sowas?!

Ich brauchte es bei einem Projekt mittels WordPress, wobei ein bestimmtes Plugin eine Seite mit einem Shortcode benötigte. Allerdings löschte ein Bug (also ein Fehler) immer diese Seite nach dem Bearbeiten der Daten. Der Author dieses Plugins war leider nicht mehr erreichbar, damit er diesen Fehler beheben könnte. Also musste ich mir eine andere Lösung einfallen lassen.

WordPress sollte immer prüfen ob es diese Seite schon/noch gibt… wenn nicht, dann ist diese automatisch zu erstellen und mit diesem Shortcode zu befüllen. Fertig. Nicht gerade sehr schön… aber hilfreich.

 

Die Lösung

Öffne von deinem aktivierten Theme die Datei functions.php – Dort hinterlegen wir nämlich einen kleinen Code:

function check_pages_live(){
        if( get_page_by_title( 'Meine neue Seite' ) == NULL ) {
        create_pages_fly( 'Meine neue Seite' );
        }
    }
    add_action('init','check_pages_live');
    function create_pages_fly($pageName) {
        $createPage = array(
          'post_title'    => $pageName,
          'post_content'  => 'Du kannst hier jeden Content einfügen.',
          'post_status'   => 'publish',
          'post_author'   => 1,
          'post_type'     => 'page',
          'post_name'     => $pageName
        );

        // Insert the post into the database
        wp_insert_post( $createPage );
    }

|

Was genau macht der Code?

Im ersten Abschnitt wird geprüft, ob eine gewisse Seite mit dem Titel “Meine neue Seite” existiert. Wenn ja… dann tue nichts… wenn nein, dann führe den Bereich “function create_pages_fly” aus.

Und der Abschnitt  “function create_pages_fly” erstellt dabei stets eine neue WordPress Seite:

// Name der Seite (wird gleich von oben übernommen)
'post_title'    => $pageName,

// Inhalt der Seite
'post_content'  => 'Du kannst hier jeden Content einfügen.',

// Status der Seite > publish = veröffentlicht
'post_status'   => 'publish',

// Id des Benutzers der diese Seite veröffentlich hat
'post_author'   => 1,

// Hier kannst du angeben, ob es ein Artikel oder eine Seite ist
// Für eine Seite = page anzugeben, für einen Artikel = post anzugeben
'post_type'     => 'page',

// Name des Artikels (wird gleich von oben übernommen)
'post_name'     => $pageName

Die ursprüngliche Diskussion über dieses “Feature” kannst du unter stackexchange.com abrufen.

Thats it.
Falls du weitere Ergänzungen zu diesem Code, oder auch Fragen hast, dann benutze bitte die Kommentarfunktion 😉