わかりました。私たち(私のチーム)は、アドバンストカスタムフィールドとポストエンバイロメントを組み合わせたクライアント用のカスタム機能を構築しました。投稿が公開または期限切れになる予定の場合、ACFで作成されたリレーションシップアレイに追加/削除されます。投稿を公開するプロセスは、次のとおりです。Wordpress、ACF関係配列&ポストエクスビリエータープラグイン奇妙な振る舞い - 配列内の項目が何とか失われる
クライアントは投稿を作成し、公開して期限を切る時間をスケジュールします。これは、WordpressとPost Expiratorプラグインのデフォルトの機能であるため、問題なく動作します。次に、ポストエディタにチェックボックスがあります。チェックボックスをオンにすると、 'true'が関係配列からそのポストを追加して削除する関数にフックします(ポストをホームページカルーセルに挿入するために使用されます)。これをローカルでテストすると素晴らしい結果が得られますが、クライアントはポストの有効期限より前に、関係配列からランダムに消えていくポストに問題が発生し続けることがあります。
私たちのローカルテストインストールではこのようなことは起こりませんが、私たちはいかなるデータも管理しておらず、コンテンツを更新していないので、私たちとクライアントのインストールの最大の違いです。
私たちはあらゆる種類のトラブルシューティングと調整を試みましたが、ローカルビルドを意図的に制動しようとしましたが、バグを再現できませんでした。だから、私はこれらの投稿がなぜ無作為に消えているのかについて、いくつかの新鮮なアイデアを手に入れています。
ありがとうございます!ここで
は、ACF関係配列を処理し、PHPの:
//Add post to homepage carousel on post update if posts ACF is checked true
function add_post_to_homepage_carousel() {
$homepage_id = get_option('page_on_front');
$post_to_add = get_post();
$post_checked = get_field('add_to_homepage_carousel', $post_to_add->ID);
$carray = get_field('carousel_post_selection', $homepage_id);
if (!is_array($carray)) {
$carray = array();
}
if ($post_checked === 'true' && !in_array($post_to_add, $carray, true)) {
array_unshift($carray, $post_to_add);
update_field('carousel_post_selection', $carray, $homepage_id);
}
}
add_action('save_post', 'add_post_to_homepage_carousel', 10, 2);
add_action('publish_future_post', 'add_post_to_homepage_carousel', 10, 2);
//clean carousel array if post expired or unset from wp editor
function clear_carousel_array() {
$homepage_id = get_option('page_on_front');
$carray = get_field('carousel_post_selection', $homepage_id);
$post_to_remove = get_post();
$post_checked = get_field('add_to_homepage_carousel', $post_to_remove->ID);
if (!is_array($carray)) {
$carray = array();
}
if ($post_checked === 'false') {
if (($key = array_search($post_to_remove, $carray, true)) !== NULL) {
unset($carray[$key]);
}
update_field('carousel_post_selection', $carray, $homepage_id);
}
}
add_action('save_post', 'clear_carousel_array');