category

Feedme をつかってエントリのフィールドを一括で編集する #craftcms

2019-05-05

エントリを移行してきたことで記事が増えた。

2019-04-30

ただ、このエントリで書いたみたいに連携用のエントリには lightswitch のフィールドを持たせることにした。

2019-05-04

ここでも書いたんだけど、初期値を ON にしてしまうと当然全てのエントリがONの状態になってしまうわけで。。。

2019-05-03

ということで、これまで取り出していたルールの Diary タグがついたものを除外して、直近100件のエントリについて lightswitch をONにすることにした。

一括編集とかはないのでその辺は JSON を用意して Feedme でアップデートするという方法で。

とりあえず update.json をこんな感じで用意する。

{
    "items": [
    {# Diary という名前のタグをセット #}
    {% set tagDiary = craft.tags().title('Diary').one() %}
    {# Diary タグと関連づいているエントリ ID を取得 #}
    {% set diaryEntryIds = craft.entries.section('article').relatedTo(tagDiary).ids() %}
    {# 上記 ID を連結 #}
    {% set excludeEntryIds = diaryEntryIds | join(', not ') %}
    {# それらを除外した残りのエントリを取得 #}
    {% set filterdEntries = craft.entries.section('article').id('and, not ' ~ excludeEntryIds).limit(100).all() %}
    {% for entry in filterdEntries %}
        {
        "title": "{{ entry.title }}",
        "date": "{{ entry.postDate|atom }}",
        "permalink": "{{ entry.url }}",
        "slug": "{{ entry.slug }}"
        }{% if loop.last %}{% else %},{% endif %}
    {% endfor %}
    ]
}

updateするようなので必要じゃない本文とかははずして、キーの判定に使うslug を入れておく。

こうすることで対象のエントリが取得できるので Feedme でインポートする設定でインポートの対象は slug を設定しておいて、 lightswitch のところは初期値 ON にしたうえで、初期値を使うでインポートする。

判定のキーは slug にすることでupdateができた。



今回の話とは関係なく、Feedmeで一括編集する時に、特定のタグを追加するとかはどうやってやるのがいいんだろうな。

リレーションになってるんだろうからその辺がどうやるのかを今度試してみよう。