Module: Jekyll::WordPress

Defined in:
lib/jekyll/converters/wordpress.rb

Class Method Summary collapse

Class Method Details

.process(dbname, user, pass, host = 'localhost', table = "wp_posts") ⇒ Object

Reads a MySQL database via Sequel and creates a post file for each post in “table” that has post_status = ‘publish’. This restriction is made because ‘draft’ posts are not guaranteed to have valid dates.



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/jekyll/converters/wordpress.rb', line 18

def self.process(dbname, user, pass, host = 'localhost', table = "wp_posts")
  db = Sequel.mysql(dbname, :user => user, :password => pass, :host => host)

  FileUtils.mkdir_p "_posts"

  sql = "SELECT * FROM #{table} WHERE post_status = 'publish' and post_type = 'post'"

  db[QUERY].each do |post|
    # Get required fields and construct Jekyll compatible name
    title = post[:post_title]
    #sanitize
    slug = post[:post_name].gsub(/\//,'_')
    date = post[:post_date]
    content = post[:post_content]

    name = "%02d-%02d-%02d-%s.html" % [date.year, date.month, date.day,
                                           slug]

    # Get the relevant fields as a hash, delete empty fields and convert
    # to YAML for the header
    data = {
       'layout' => 'post',
       'title' => title.to_s,
       'excerpt' => post[:post_excerpt].to_s,
       'wordpress_id' => post[:ID],
       'wordpress_url' => post[:guid]
     }.delete_if { |k,v| v.nil? || v == ''}.to_yaml

    # Write out the data and content to file
    File.open("_posts/#{name}", "w") do |f|
      f.puts data
      f.puts "---"
      f.puts content
    end
  end

end