Berlari ke masalah yang sama dan menemukan solusi. Apa yang saya lakukan adalah sebagai berikut:
1.) Setiap kali ada sesuatu yang berubah di sidebar blog 1, simpan array widget tersebut dan pengaturannya sebagai transient seluruh dunia, yang akan kedaluwarsa setelah 24 jam.
2.) Pada semua blog anak-anak, masukkan beberapa kode ke sidebar.php yang mengambil transient seluruh tempat ini dan menampilkan widget.
Kedengarannya cukup mudah, tetapi sangat sulit untuk mencari tahu ... dan masih jauh dari sempurna.
Mari kita menggali beberapa Kode:
function antwortzeit_cache_widgets() {
if ( false === ( $widgets = get_site_transient( 'antwortzeit_widgets' ) ) ) {
global $wp_registered_sidebars, $wp_registered_widgets;
foreach ( (array) $wp_registered_sidebars as $key => $value ) {
if ( sanitize_title($value['name']) == sanitize_title('Breite Spalte') ) {
$index = $key;
break;
}
}
$sidebars_widgets = wp_get_sidebars_widgets();
if ( empty( $sidebars_widgets ) )
return false;
if ( empty($wp_registered_sidebars[$index]) || !array_key_exists($index, $sidebars_widgets) || !is_array($sidebars_widgets[$index]) || empty($sidebars_widgets[$index]) )
return false;
$sidebar = $wp_registered_sidebars[$index];
foreach ( (array) $sidebars_widgets[$index] as $id ) {
if ( !isset($wp_registered_widgets[$id]) ) continue;
$params = array_merge(
array( array_merge( $sidebar, array('widget_id' => $id, 'widget_name' => $wp_registered_widgets[$id]['name']) ) ),
(array) $wp_registered_widgets[$id]['params']
);
// Substitute HTML id and class attributes into before_widget
$classname_ = '';
foreach ( (array) $wp_registered_widgets[$id]['classname'] as $cn ) {
if ( is_string($cn) )
$classname_ .= '_' . $cn;
elseif ( is_object($cn) )
$classname_ .= '_' . get_class($cn);
}
$classname_ = ltrim($classname_, '_');
$params[0]['before_widget'] = sprintf($params[0]['before_widget'], $id, $classname_);
$params = apply_filters( 'dynamic_sidebar_params', $params );
$widgets[] = array(
'callback' => $wp_registered_widgets[$id]['callback'],
'base' => $wp_registered_widgets[$id]['callback'][0]->id_base,
'id' => $wp_registered_widgets[$id]['callback'][0]->id,
'params' => $params,
);
}
set_site_transient( 'antwortzeit_widgets', $widgets, 60 * 60 * 24 );
}
}
add_action( 'init', 'antwortzeit_cache_widgets');
Ini termasuk dalam functions.php blog 1 (atau lebih baik, plugin semuanya) dan menyimpan widget ke transient dipesan lebih dahulu setiap 24 jam.
function antwortzeit_widgetbruecke( $instance, $new_instance ) {
delete_site_transient('antwortzeit_widgets');
antwortzeit_cache_widgets();
return $instance;
}
add_filter( 'widget_update_callback', 'antwortzeit_widgetbruecke', 10, 2 );
Ini juga termasuk ke dalam fungsi blog 1. php dan memperbarui sementara setiap kali widget diperbarui.
Dan akhirnya untuk blog lain masuk ke sidebar.php:
global $blog_id;
if($blog_id !== 1) {
switch_to_blog(1);
$widgets = get_site_transient( 'antwortzeit_widgets' );
if($widgets) :
foreach($widgets as $widget) :
if ( is_callable($widget['callback']) ) {
call_user_func_array($widget['callback'], $widget['params']);
}
endforeach;
endif;
restore_current_blog();
}
Semoga ini bisa membantu seseorang. Jika seseorang memiliki perbaikan, mereka akan sangat disambut.
get_blog_option('1','sidebars_widgets');
untuk mendapatkan daftar widget tetapi saya tidak dapat menemukan cara untuk memproses data menjadi sidebar.