如何通过挂钩更新数据库中的网络选项值

时间:2013-06-26 作者:TARMAK

我正在尝试为我的多站点中的所有站点更新DB中选项的值,但没有成功,这是代码,在过去的2个小时里我一直在胡思乱想:

function simplifyit_upload_folder($blog_id){
      switch_to_blog($blog_id);
      update_option(\'uploads_use_yearmonth_folders\', false);      
      restore_current_blog();
      }
      add_action( \'update_wpmu_options\', \'simplifyit_upload_folder\' );
感谢@TheDeadMedic为我提供了过滤的答案,但我希望更新数据库中的值:

add_filter( \'option_uploads_use_yearmonth_folders\', \'__return_false\', 100 );
很抱歉,我想确保网络中的所有博客在YYYYMM上载选项中默认设置为0,但如果网络管理员希望对单个站点这样做,他/她可以通过WP网络面板覆盖它

2 个回复
最合适的回答,由SO网友:Otto 整理而成

“update\\u wpmu\\u options”肯定是错误的钩子。它不会将blog\\u id作为参数发送,因此您的代码永远不会使用该挂钩和blog\\u id参数。

如果您只是想更新每个站点上的值,那么我会update_option(\'uploads_use_yearmonth_folders\', 0);init 钩住,等待每个站点访问一次。

SO网友:s_ha_dum

该字段以空值结尾:-(

如果您想做的是删除该值,就像您在该注释中所做的那样,那么您需要delete_option, 或delete_site_option. 后者似乎最合适。

function simplifyit_upload_folder(){
    $current_site = get_current_site();
    switch_to_blog($current_site->id);
    delete_site_option(\'uploads_use_yearmonth_folders\');      
    restore_current_blog();
}
add_action( \'update_wpmu_options\', \'simplifyit_upload_folder\' );
我用过get_current_site 获取博客ID,因为该钩子不传递该值。

我不完全确定你想要的钩子。它在admin中运行,并且只有在POST 数据--http://core.trac.wordpress.org/browser/trunk/wp-admin/network/settings.php#L69

根据对问题的编辑,听起来您希望wpmu_new_blog 钩子,以便在创建博客时设置您的值。之后,博客管理员可以对其进行更改,而您的代码不会进行干扰。

未测试(我现在在开发服务器上没有MU),但。。。

function simplifyit_upload_folder($blog_id){
    // not 100% sure exactly what you need here; caveat emptor :)
    update_option(\'uploads_use_yearmonth_folders\', false);      
}
add_action( \'wpmu_new_blog\', \'simplifyit_upload_folder\' );

结束

相关推荐

使用jQuery删除存储在wp_Options中的数据

我想知道是否有人能就我的问题给我进一步的建议。我的插件的一部分存储了用于调试的日志文件。我已经使用jquery和wp\\u localise\\u脚本在我的管理页面的(div#log)中成功地显示了它们。我有一个删除这些日志的按钮,但我不确定如何处理。我觉得ajax可能会在这里派上用场,但不确定从哪里开始。以下是我的代码的相关部分:admin_enqueue_scripts (action) $args = array(get_option(\'wow_tweets_log\'));//log files