Scharf Beobachtet

Tech Know How

Aus WordPress Feed eine Google Sitemap erstellen

2021-11-06 17:14:27

Mit PHP wohlgemerkt. Es kann ja durchaus den Fall geben, das man WordPress komplett Headless verwenden will. Dann muss unter anderem auch die Erstellung der Sitemap für die Google Search Console selbst gemacht werden.

Hier der Code der Klasse. Die Daten aus dem JSON werden als Array $data reingegeben.

<?php

class GoogleSitemapService {

    private $filePath = 'sitemap.xml';
    private $maxAgeHours = 24;

    public function checkMakeSitemap(array $data) {

        if($this->mustBeUpdated()) {

            $this->writeSitemap($data);
        }
    }

    private function writeSitemap(array $data) {

        $contentTop = <<<HEREDOC
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
HEREDOC;

        $contentBottom = <<<HEREDOC2
        </urlset>
HEREDOC2;        
        $contentList = [];

        foreach($data AS $post) {

            $item = <<<ENTRY
<url>
    <loc>{URL}</loc>
    <lastmod>{DATE}</lastmod>
</url>            
ENTRY;
            $newLink = 'https://www.scharf-beobachtet.de/article/' . $post->slug;
            $when = substr($post->date, 0, strpos($post->date, 'T'));
            $item = str_replace(['{URL}', '{DATE}'], [$newLink, $when], $item);
            $contentList[] = $item;
        }

        file_put_contents($this->filePath, $contentTop . join("", $contentList) . $contentBottom);
    }

    private function mustBeUpdated(): bool {

        if(!file_exists($this->filePath)) return true;

        $ts = time();
        $fileTs = filemtime($this->filePath);
        $increaseSeconds = $this->maxAgeHours*3600;
        
        if($fileTs + $increaseSeconds > $ts) {
            return false;
        }

        return true;
    }
}

Kurz erklärt. Die Klasse prüft ob die Sitemap weniger als 24h alt ist, bzw. überhaupt existiert. Ist dem nicht so, dann wird die Datei erneuert.

Alles nur mit PHP standards.

Zurück