WP-CLI(コマンドラインからWordPressを操作)

  • Obsidian で書いた内容(Markdown ファイル)を、Mac ターミナルからワードプレスに投稿したかった
  • WP-CLI を使えば実現できるらしい
  • WP-CLI を使うと、ワードプレスのインストールから何から何まで一通りできる様子であった
  • ただ、今回はすでに MAMP 環境にインストールしているワードプレスがあったので、そちらで触ってみた
  • ある程度用途は限定されるかもしれないが、「いちいちブラウザを操作して」といったフローがごっそり無くなり、サクサク記事の登録・更新ができたので便利

インストール

wp-config 修正

  • MAMP 環境だったので、データベースのホスト名は以下となっていた
    • define( 'DB_HOST', 'localhost' );
  • これを以下に書き換え
    • define( 'DB_HOST', 'localhost:/Applications/MAMP/tmp/mysql/mysql.sock' );

ディレクトリ移動

  • cd ワードプレスのルートディレクトリ

実践

新規投稿

wp post create '~/Dropbox/Obsidian/BLOG/python/こんにちは.md' --post_category=12 --post_title='こんにちは' --post_status=publish --post_author=1

記事更新

wp post update 1575 '~/Dropbox/Obsidian/BLOG/python/こんにちは.md'

登録記事一覧を取得

wp post list --format=csv --fields=ID,post_title > ~/Downloads/wp-file.csv

おまけ

  • Obsidian で管理している Markdown ファイル(それぞれ格納しているフォルダ名 = カテゴリー名としている)の一覧を抽出して、上記のコマンド文を吐き出すという簡単な Python スクリプト
  • ただし、--post_category は、カテゴリー ID(数値) を指定する必要がある
    • {'カテゴリー名': カテゴリーID} と辞書で登録してループごとに取り出す
import os

def files_tolist_from_dir(dir):
    files = os.listdir(dir)
    files = [i for i in files if i[0] != '.'] # 不可視ファイル削除
    files.sort() # 順番が保持されないのでソートをかける
    return files

dir = '~/Dropbox/Obsidian/BLOG'
categories = files_tolist_from_dir(dir)
categories_id = {
    'wordpress': 2,
    'python': 3,
    'javascript': 4,
    'html': 5,
    'css': 6,
    'git-github': 7,
    'shopify': 8,
    'linux': 9,
    'ruby': 10,
    'hugo': 11,
    'others': 12,
    'tools': 13,
}

for category in categories:
    markdown_files = files_tolist_from_dir(f'{dir}/{category}')
    for markdown_file in markdown_files:
        file_path = f'{dir}/{category}/{markdown_file}'
        post_title = markdown_file.split('.md')[0]

        sql = f"wp post create '{file_path}' --post_category={categories_id[category]} --post_title='{post_title}' --post_author=1"
        p(sql)

参考