我想您应该根据小部件的标题来定位它,因此可以尝试以下功能:
/**
* Update a widget text located by it\'s title
*
* @see https://wordpress.stackexchange.com/a/155518/26350
*
* @param string $search_title
* @param string $new_text
* @param boolean
*/
function wpse_155046_update_widget_text_by_title( $search_title, $new_text )
{
// Get all data from text widgets
$widgets = get_option( \'widget_text\' );
foreach( $widgets as $key => $widget )
{
// Compare and ignore case:
if( mb_strtolower( $search_title ) === mb_strtolower( $widget[\'title\'] ) )
{
// Replace the widget text:
$widgets[$key][\'text\'] = $new_text;
// Update database and exit on first found match:
return update_option( \'widget_text\', $widgets );
}
}
return false;
}
其中,我们只替换与给定标题匹配的第一个小部件实例的文本。
用法示例:
您可以应用上述功能,如下所示:
if( wpse_155046_update_widget_text_by_title(
\'My fruits\',
\'Five green apples and nine oranges.\'
)
)
{
echo \'success\';
}
else
{
echo \'no success\';
}
我们将小部件的文本替换为标题“我的水果”。
Before:
After:
您也可以退房my answer here 控件数据在数据库中的位置。
更新:
下面的评论中@Tony提出了一个很好的问题,如何在给定实例号的情况下替换小部件文本。这里有一个未经测试的想法:
/**
* Update a widget text located by it\'s instance number
*
* @see https://wordpress.stackexchange.com/a/155518/26350
*
* @param string $id
* @param string $new_text
* @param boolean
*/
function wpse_155046_update_widget_text_by_instance_number( $instance_number, $new_text )
{
// Get all data from text widgets
$widgets = get_option( \'widget_text\' );
if( isset( $widgets[$instance_number][\'text\'] ) )
{
// Replace the widget text:
$widgets[$instance_number][\'text\'] = $new_text;
// Update database and exit on first found match:
return update_option( \'widget_text\', $widgets );
}
return false;
}