WordPressでタグにACF項目のデータを一括登録する

WordPressのタグに設定されたACF項目にデータを一括登録する方法。

タグの重み付けが必要な背景

WordPressのタグは、single.phpで全件表示するにはOKでも、一覧画面で表示するには多すぎる。一覧画面でタグの件数が多いとレイアウトが崩れたり、スパムっぽくなる。ここではタグにACF項目positionを設け、sortやlimitに活用する。

方法1: CSVファイルを使ったインポート

  1. タグとACF項目 ‘position’ の値を含むCSVファイルを作成します。CSVファイルは次のような形式にします
    tag_name, slug, position
    tag1, slug2, position1
    tag2, slug2, position2
    ...
  2. WordPressに「WP All Import」プラグインをインストールして有効化します。
  3. 「WP All Import」の設定で、作成したCSVファイルをインポートします。タグ名とACF項目 ‘position’ をマッピングします。
  4. インポート処理を実行し、WordPressにタグとACF項目 ‘position’ の値が一括登録されます。

方法2: PHPコードを使った一括登録

タグ名、slug、ACF項目 ‘position’ の値を含む配列を用意する。

$tags_data = array(
    array('name' => 'tag1', 'slug' => 'slug1', 'position' => 'position1'),
    array('name' => 'tag2', 'slug' => 'slug2', 'position' => 'position2'),
    ...
);

functions.phpファイルに以下のコードを追加し、タグ、slug、ACF項目 ‘position’ の値を一括登録する関数を作成する

function import_tags_with_acf_position_and_slug($tags_data) {
    foreach ($tags_data as $tag_data) {
        $tag_name = $tag_data['name'];
        $tag_slug = $tag_data['slug'];
        $tag_position = $tag_data['position'];
        
        // タグを作成・更新
        $term = wp_insert_term($tag_name, 'post_tag', array('slug' => $tag_slug));
        
        if (!is_wp_error($term)) {
            $term_id = $term['term_id'];
            
            // ACF項目 'position' の値を設定
            update_field('position', $tag_position, 'term_' . $term_id);
        }
    }
}

作成した関数を呼び出してタグ、slug、ACF項目 ‘position’ の値を一括登録する

import_tags_with_acf_position_and_slug($tags_data);