以编程方式将小部件插入 Wordpress 侧边栏
Programmatically inserting a widget into Wordpress sidebar
我一直在 PHP 7.0 上使用 this code,但今晚决定升级到 7.4。此代码自动将小部件插入 Wordpress 侧边栏,但它不再有效。
function insert_widget_in_sidebar( $widget_id, $widget_data, $sidebar ) {
// Retrieve sidebars, widgets and their instances
$sidebars_widgets = get_option( 'sidebars_widgets', array() );
$widget_instances = get_option( 'widget_' . $widget_id, array() );
// Retrieve the key of the next widget instance
$numeric_keys = array_filter( array_keys( $widget_instances ), 'is_int' );
$next_key = $numeric_keys ? max( $numeric_keys ) + 1 : 2;
// Add this widget to the sidebar
if ( ! isset( $sidebars_widgets[ $sidebar ] ) ) {
$sidebars_widgets[ $sidebar ] = array();
}
$sidebars_widgets[ $sidebar ][] = $widget_id . '-' . $next_key;
// Add the new widget instance
$widget_instances[ $next_key ] = $widget_data;
// Store updated sidebars, widgets and their instances
update_option( 'sidebars_widgets', $sidebars_widgets );
update_option( 'widget_' . $widget_id, $widget_instances );
}
根据我的研究,这似乎是“[]”不再初始化数组的问题。
我已经尝试了所有我知道的方法,但无法让它发挥作用。我总是用 [] 初始化数组,所以我有点迷路了。
这是输入数据的示例:
insert_widget_in_sidebar('recent-posts',array('title' => $recent_posts_title,'number' => $recent_posts_number,'show_date' => $show_date),$sidebar_name);
例如,$sidebar_name 为 'right-sidebar'。
我终于能够通过正确初始化数组来解决问题...这是为我的目的编写的代码的编辑版本,但主要更改如下:
if ( !isset( $sidebars_widgets[$sidebar] ) ) {
$sidebars_widgets = array();
$sidebars_widgets[$sidebar] = array();
}
$sidebars_widgets[$sidebar][] = $widget_id . '-' . '1';
// Add the new widget instance
$widget_instances = array();
$widget_instances[1] = $widget_data;
我一直在 PHP 7.0 上使用 this code,但今晚决定升级到 7.4。此代码自动将小部件插入 Wordpress 侧边栏,但它不再有效。
function insert_widget_in_sidebar( $widget_id, $widget_data, $sidebar ) {
// Retrieve sidebars, widgets and their instances
$sidebars_widgets = get_option( 'sidebars_widgets', array() );
$widget_instances = get_option( 'widget_' . $widget_id, array() );
// Retrieve the key of the next widget instance
$numeric_keys = array_filter( array_keys( $widget_instances ), 'is_int' );
$next_key = $numeric_keys ? max( $numeric_keys ) + 1 : 2;
// Add this widget to the sidebar
if ( ! isset( $sidebars_widgets[ $sidebar ] ) ) {
$sidebars_widgets[ $sidebar ] = array();
}
$sidebars_widgets[ $sidebar ][] = $widget_id . '-' . $next_key;
// Add the new widget instance
$widget_instances[ $next_key ] = $widget_data;
// Store updated sidebars, widgets and their instances
update_option( 'sidebars_widgets', $sidebars_widgets );
update_option( 'widget_' . $widget_id, $widget_instances );
}
根据我的研究,这似乎是“[]”不再初始化数组的问题。
我已经尝试了所有我知道的方法,但无法让它发挥作用。我总是用 [] 初始化数组,所以我有点迷路了。
这是输入数据的示例:
insert_widget_in_sidebar('recent-posts',array('title' => $recent_posts_title,'number' => $recent_posts_number,'show_date' => $show_date),$sidebar_name);
例如,$sidebar_name 为 'right-sidebar'。
我终于能够通过正确初始化数组来解决问题...这是为我的目的编写的代码的编辑版本,但主要更改如下:
if ( !isset( $sidebars_widgets[$sidebar] ) ) {
$sidebars_widgets = array();
$sidebars_widgets[$sidebar] = array();
}
$sidebars_widgets[$sidebar][] = $widget_id . '-' . '1';
// Add the new widget instance
$widget_instances = array();
$widget_instances[1] = $widget_data;