WordPressで定期的に同じ構造の記事を作っていると、毎回内部リンクを手動で調べて貼る作業が発生します。プラグインで自動化する方法もありますが、「特定のカテゴリーの記事だけにリンクしたい」「外部で生成したHTMLにリンクを埋め込みたい」という場合はプラグインでは対応しにくい。そこでPython + WordPress REST APIで外部から内部リンクを自動付与するスクリプトを作りました。
課題:プラグインでは解決できないケース
内部リンクの自動化というと、WordPressプラグインが真っ先に思い浮かびます。ただしプラグインには限界があります。
今回のケースは「外部スクリプトで生成した一覧表のHTMLに、特定カテゴリーの記事だけを内部リンクとして埋め込みたい」というものでした。プラグインでは対応できないため、WordPress REST APIを使って外部から解決しました。
仕組み
WordPress REST APIには記事を検索するエンドポイントがあります。このときcategoriesパラメータでカテゴリーIDを指定すると、そのカテゴリーに属する記事だけを検索対象にできます。
# カテゴリーID:5(レシピ)の記事だけを検索 GET /wp-json/wp/v2/posts ?search=カルボナーラ &categories=5 &per_page=5 &_fields=link,title
これで「カテゴリー5(レシピ)に属する記事の中から『カルボナーラ』を含むタイトルを検索する」という絞り込みができます。ニュース記事やコラム記事が誤ってヒットすることを防げます。
カテゴリーIDで絞り込む理由
WordPressの記事検索はデフォルトでは全カテゴリーが対象です。例えば「カルボナーラ」で検索すると、レシピページだけでなく「今週のおすすめパスタ5選」のようなコラム記事もヒットします。
実装コード
認証にはWordPressのアプリケーションパスワードを使います。管理画面 → ユーザー → プロフィール → アプリケーションパスワードから発行できます。
import httpx WP_URL = "https://your-site.com" WP_USER = "your_username" WP_APP_PASSWORD = "xxxx xxxx xxxx xxxx" # 絞り込むカテゴリーID(複数指定可) CATEGORY_RECIPE = [5] # レシピ CATEGORY_CHEF = [8, 9] # シェフ紹介(男性・女性) def search_wp(query, categories): url = f"{WP_URL}/wp-json/wp/v2/posts" params = { "search": query, "categories": ",".join(str(c) for c in categories), "per_page": 5, "_fields": "link,title", } auth = (WP_USER, WP_APP_PASSWORD) with httpx.Client(timeout=10) as client: res = client.get(url, params=params, auth=auth) posts = res.json() if not posts: return None # タイトルに検索ワードが含まれるものを優先 for post in posts: if query in post["title"]["rendered"]: return post["link"] return posts[0]["link"] def make_link(text, url): if url: return f'<a href="{url}">{text}</a>' return text # 使用例:週間人気レシピランキングの一覧表にリンクを付与 ranking = [ {"rank": 1, "recipe": "カルボナーラ", "chef": "田中シェフ"}, {"rank": 2, "recipe": "肉じゃが", "chef": "佐藤シェフ"}, {"rank": 3, "recipe": "アボカドサーモン丼", "chef": "鈴木シェフ"}, ] for item in ranking: recipe_url = search_wp(item["recipe"], CATEGORY_RECIPE) chef_url = search_wp(item["chef"], CATEGORY_CHEF) print(make_link(item["recipe"], recipe_url)) print(make_link(item["chef"], chef_url))
応用できるケース
外部APIやスクレイピングで取得したランキングデータに、内部リンクを付与してからWordPressに投稿する。
CSVや外部データから一覧表を生成する際に、該当カテゴリーの記事URLを自動で埋め込む。
週次・月次で更新する定型コンテンツのリンク付け作業を自動化する。
まとめ
WordPress REST APIのcategoriesパラメータを使うことで、外部スクリプトからでも精度の高い内部リンク付与ができます。プラグインでは対応しにくい「特定カテゴリーへの絞り込み」「外部生成HTMLへの適用」といったケースに有効です。
定期的に同じ構造のコンテンツを更新しているサイトなら、この仕組みを導入するだけでかなりの作業時間を削減できます。
