我最近从 WordPress 转移到我自己的系统,我面临的挑战之一是将我的帖子从 WordPress 转移到我自己的系统中。我发现使用导出的 XML 文件是实现这一目标的最简单方法。

在第一次查看 XML 文件时,我认为使用 SimpleXML 将是最简单的方法。我的第一次尝试使我能够看到帖子的详细信息,但事实证明,帖子内容和摘录有点难以提取。

这个 WordPress 在 XML 提要中使用命名空间的原因意味着进行简单的查找将无法处理需要循环和单独提取或使用不同的命名空间查找的帖子。

<?php


/**
* WordPress class - Manages the WordPress XML file and gets all data from that.
*/
class WordPress
{
    public static $wpXML;

    function __construct($wpXML)
    {
        $this->wpXML = $wpXML;
    }

    public function getPosts()
    {
        $xml = simplexml_load_file($this->wpXML);
        $posts = array();

        foreach($xml->channel->item as $item)
        {
            $categories = array();
            foreach($item->category as $category)
            {
                //echo $category['domain'];
                if($category['nicename'] != "uncategorized" && $category['domain'] == "category")
                {
                    //echo 'Yep';
                    $categories[] = $category['nicename'];
                }
            }

            $content = $item->children('http://purl.org/rss/1.0/modules/content/');

            $posts[] = array(
                "title"=>$item->title,
                "content"=>$content->encoded,
                "pubDate"=>$item->pubDate,
                "categories"=>implode(",", $categories),
                "slug"=>str_replace("/", "", str_replace("http://blog.jamesking56.co.uk/", "", $item->guid))
            );
        }

        return $posts;
    }
}

?>

这是一个简单的过程。我只需要添加另一个命名空间定义并将其存储到一个变量中。

$excerpt = $item->children('http://wordpress.org/export/1.2/excerpt/');

该类收集帖子将它们添加到数组并返回数组,这很好,但我想将帖子添加到类内的数据库中,而不是获取一个数组并再次循环遍历它。

在传递我的数据库引用 ($db) 的类中需要进行一个简单的更改,然后在创建数组时,我可以一次将其传递给数据库。

$wp = new WordPress('sitename.xml',$db);
$posts = $wp->getPosts();

我的最后一堂课是这样的:

class WordPress
{
    public $wpXML;
    public $db;

    function __construct($wpXML,$db)
    {
        $this->wpXML = $wpXML;
        $this->db = $db;
    }

    private function _slug($text){

      // replace non letter or digits by -
      $text = preg_replace('~[^\pLd]+~u', '-', $text);

      // trim
      $text = trim($text, '-');

      // transliterate
      $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);

      // lowercase
      $text = strtolower($text);

      // remove unwanted characters
      $text = preg_replace('~[^-w]+~', '', $text);

      if (empty($text))
      {
        return 'n-a';
      }

      return $text;
    }

    public function getPosts()
    {
        $xml = simplexml_load_file($this->wpXML);
        $posts = array();

        foreach($xml->channel->item as $item)
        {
            $categories = array();
            foreach($item->category as $category)
            {
                //echo $category['domain'];
                if($category['nicename'] != "uncategorized" && $category['domain'] == "category")
                {
                    //echo 'Yep';
                    $categories[] = $category['nicename'];
                }
            }

            $content = $item->children('http://purl.org/rss/1.0/modules/content/');
            $excerpt = $item->children('http://wordpress.org/export/1.2/excerpt/');



            $post = array(
                "postTitle"=>$item[0]->title,
                "postSlug"=>$this->_slug($item[0]->title),
                "postCont"=>htmlentities($content->encoded),
                "postDesc"=>htmlentities($excerpt->encoded),
                "postDate"=> strftime("%Y-%m-%d %H:%M:%S", strtotime($item[0]->pubDate))
            );

            $this->db->insert("blog",$post);
        }

        //return $posts;
    }
}

$wp = new WordPress('sitename.xml',$db);
$posts = $wp->getPosts();

 

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。