島根県安来市のフリーランスエンジニア_プログラマー画像1

WordPress REST APIで外部からカテゴリーを絞り込んで内部リンクを自動付与するPythonスクリプトを作った

WordPressで定期的に同じ構造の記事を作っていると、毎回内部リンクを手動で調べて貼る作業が発生します。プラグインで自動化する方法もありますが、「特定のカテゴリーの記事だけにリンクしたい」「外部で生成したHTMLにリンクを埋め込みたい」という場合はプラグインでは対応しにくい。そこでPython + WordPress REST APIで外部から内部リンクを自動付与するスクリプトを作りました。

課題:プラグインでは解決できないケース

内部リンクの自動化というと、WordPressプラグインが真っ先に思い浮かびます。ただしプラグインには限界があります。

❌ 全記事のキーワードに一律でリンクされてしまう
❌ 特定カテゴリーだけに絞り込めない
❌ 外部で生成したHTMLには適用できない
❌ 誤リンクが発生しても気づきにくい

今回のケースは「外部スクリプトで生成した一覧表の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選」のようなコラム記事もヒットします。

絞り込みなしの場合
「カルボナーラ」で検索 → レシピ記事・コラム記事・ランキング記事が混在してヒット → 意図しない記事にリンクされる
カテゴリーID指定の場合
「カルボナーラ」× カテゴリーID: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への適用」といったケースに有効です。

定期的に同じ構造のコンテンツを更新しているサイトなら、この仕組みを導入するだけでかなりの作業時間を削減できます。

WordPressの自動化・効率化のご相談はこちら

プラグイン開発・外部連携スクリプト・定期更新の自動化など

無料相談 →

ブロックチェーンの仕組みをわかりやすく解説【改ざん検知デモ付き】

ビットコイン以外のブロックチェーン活用事例6選【金融・医療・物流まで】