Custom Field Suite(CFS)と Duplicate Post(DP)を併用すると、記事を複製したときに、記事編集画面では何も入力されていないのに表示側では出力されている、というバグが発生します。
データベースがバグってしまうんですね。
これを解消するためのコードがこちらです。
バグ解消のコード(functions.php)
【functions.php】
// ---------------------------------------------- 「Custom Field Suite」と「Duplicate Post」を併用したときのバグ解消
function update_customfield( $post_id, $post) {
$types = get_post_types(array( 'public' => true, '_builtin' => false ));
if (!in_array($post->post_type, $types) || $post->post_status == 'auto-draft')
return;
$field_data = CFS()->get( false, $post_id, array( 'format' => 'raw' ) );
if ( is_array( $field_data ) ) {
foreach ( $field_data as $key => $value ) {
delete_post_meta( $post_id, $key );
}
}
$post_data = array( 'ID' => $post_id );
CFS()->save( $field_data, $post_data );
return;
}
add_action( 'save_post', 'update_customfield',10,2);
参考記事
https://www.web-labs.info/?p=9
しかし、上記コードでも解決しない問題がありました。
それは、CFS で「ループ(複製フィールド)」を使用したときです。
ループ(複製フィールド)を使うと起きるバグの解消方法
この解決方法はコードを使わずに解決できます。
CFSのループフィールドの中身のフィールドのキー名をDPの「複製しないカスタムフィールド」に入力しておく、という方法です。
例えば、このようなフィールド(入力欄)を作成したとします。
見えにくいですね。
こんな感じですね。
この「loop」フィールドの中身、つまり
- sample_loop_text
- sample_loop_textarea
- sample_loop_file
の3つを、DPの設定画面にある「複製しないカスタムフィールド」に入力しておくのです。
DPの設定画面にある「複製しないカスタムフィールド」の場所はこちらです。
WP管理画面の「設定」>「Duplicate Post」> 複製元タブの「複製しないカスタムフィールド」
入力する値が複数ある場合は正規表現っぽい入力方法が使えるみたいです。
なので、今回の例ではこのように入力できます。
sample_loop*
よく分からない方や1つずつ入力した方が安心だと思う方は、「,(カンマ)」で区切って入力することも可能です。
sample_loop_text,sample_loop_textarea,sample_loop_file
といった形です。
入力し終わったら忘れずに「変更を保存」を押して保存しましょう。
以上です。
これで記事を複製しても正常に複製されるようになります。
まぁ、「正常に」複製できるようになっても、「複製しない」ということができないのですが、、、
それはまた別のお話。。。
コメントを残す