…или как сделать так, чтобы набор метаполей и/или ACF Option Page был единым для всех блогов в рамках установки WordPress Multisite.
У меня проблема возникла, когда на мультисайте существующие глобальные настройки (Options Page) должны были стать действительно глобальными. Я пошел дальше и сделал все настройки метабоксов, включая Options Page, едиными для всех блогов.
Другими словами, при изменении набора настроек ACF главного сайта, следует избежать необходимости вручную вносить одни и те же правки во всех блогах.
Также, при переносе файлов сайта с девелоперского домена на предпрод, БД, как правило, подтягивается с прода. А значит, набор метаполей ACF может различаться.
Подход к решению таков:
- в главном блоге установки в ACF-панели настраиваем необходимые метаполя и ACF Option Page
- во всех прочих блогах ничего не создаем или удаляем, если они уже есть
- при сохранении настроек ACF главного блога создаем php-файл импорта настроек для блогов
- загружаем созданный файл, если текущий блог не главный.
Код для п.3. Можно прямо в functions.php
<?php add_action( 'shutdown', 'sh_acf_generate' ); function sh_acf_generate(){ global $wpdb; if ( ! did_action( 'save_post_acf-field-group' ) ) return; $fields = $wpdb->get_col( "SELECT post_name FROM {$wpdb->posts} WHERE post_type = 'acf-field-group' AND post_status = 'publish'" ); if ( empty( $fields ) ) return; $str_replace = array( " " => "\t", "'!!__(!!\'" => "__('", "!!\', !!\'" => "', '", "!!\')!!'" => "')", "array (" => "array(" ); $preg_replace = array( '/([\t\r\n]+?)array/' => 'array', '/[0-9]+ => array/' => 'array' ); $out = "<?php if( function_exists('acf_add_local_field_group') ):" . "\r\n" . "\r\n"; foreach( $fields as $f ) : $field_group = acf_get_field_group( $f ); // load fields $field_group['fields'] = acf_get_fields( $field_group ); // prepare for export $field_group = acf_prepare_field_group_for_export( $field_group ); $code = var_export( $field_group, true ); // change double spaces to tabs $code = str_replace( array_keys($str_replace), array_values($str_replace), $code ); // correctly formats "=> array(" $code = preg_replace( array_keys($preg_replace), array_values($preg_replace), $code ); // esc_textarea $code = esc_textarea( $code ); $out .= "acf_add_local_field_group({$code});" . "\r\n" . "\r\n"; endforeach; $out .= "endif;"; file_put_contents( get_template_directory() . '/inc/acf.php', htmlspecialchars_decode( $out, ENT_QUOTES ) ); }
Данный код является вырезкой из метода html_generate()
класса ACF_Admin_Tool_Export
. Никаких хуков найдено не было, поэтому пришлось копировать код.
На данном этапе мы отлавливаем момент сохранения настроек и, после некоторой обработки, сохраняем php-код импорта этих настроек.
Почему используем хук shutdown
, чтобы ACF успел создать/удалить новые acf-field-group
-записи при их создании/удалении.
Теперь остаётся только подключить сгенерированный файл в function.php
, предварительно убедившись, что делаем это для всех блогов, кроме главного.
<?php if ( 1 != get_current_blog_id() ): include get_template_directory() . '/inc/acf.php'; endif;
Для использования при миграции файлов с девелоперского домена, добавляем проверку текущего домена с помощью функции get_home_url()
.
MobiApp AI – True Android & iOS Mobile Apps Builder (Zero Coding Required) https://ext-opp.com/MobiAppAI
Word’s First NLP & ML Based Email, Voice & Video Marketing Autoresponder Thats Boost Email Delivery, Click & Open Rates Instantly https://ext-opp.com/VidMailsAI
Hey, did you know there are app that mass generate hundreds of redirects to your link from different domains? Get it here – https://ext-opp.com/BUS
Are you still using Calendly to schedule your calls and meetings? If your answer is yes, then you are actually hurting your business not helping it… Calendly is limited, doesn’t unlock the full potential of your business… And to make matters worse, they charge you monthly… What a joke… But you don’t have to worry, because my good friend Kundan is about to change the entire market … You see, he just launched his newest creation AI Calenderfly… The world’s first appointment-setting app that is fully powered by AI… It will do all of the heavy lifting for you on… Раскрыть »
For the reason that the admin of this site is working, no uncertainty very quickly it will be renowned, due to its quality contents about extra virgin olive oil EVOO.
very informative smoke point of olive oil articles or reviews at this time.
For the reason that the admin of this site is working, no uncertainty very quickly it will be renowned, due to its quality contents about Hollywood Smile.
For the reason that the admin of this site is working, no uncertainty very quickly it will be renowned, due to its quality contents about Liberica Coffee.
Noktasal su kaçağı tespiti Teknolojik cihazlarla su kaçağı tespit ettiler, sonuç çok iyiydi. https://intgez.com/read-blog/79255
Your blog is a testament to your dedication to your craft. Your commitment to excellence is evident in every aspect of your writing. Thank you for being such a positive influence in the online community.
Ümraniye süpürge boru temizliği Makul fiyatlarla süpürgemin performansını artırdılar. https://kiwiboom.com/read-blog/930
Hey there You have done a fantastic job I will certainly digg it and personally recommend to my friends Im confident theyll be benefited from this site