从另一个主题导入设置

时间:2017-10-03 作者:user2154262

我有个问题。我试图使一个主题与另一个主题兼容。例如,如果您将此主题命名为“旧主题”,并将其更改为“新主题”,则来自customizer的选项也将保留在“新主题”中。如果我在外观->主题中切换主题,一切都会很好。当我从customizer切换主题时,问题来了。我使用的是这样的东西(假设我想导入一个文本控件):

function import_settings{ 
  $old_theme_content = get_option(\'theme_mods_my_old_theme\');
  if( !empty($old_theme_content[\'my_text_control\']) ){
    set_theme_mod(\'my_new_control\', $old_theme_content[\'my_text_control\']);
  }
}
add_action( \'after_switch_theme\',\'import_settings\');
当我从customizer切换主题时,我必须关闭customizer,最终删除变更集,然后我可以从导入中看到这些更改。我希望在从自定义预览中切换主题后,可以在自定义预览中看到更改。“after\\u switch\\u theme”钩子似乎不会触发。有人知道如何做到这一点吗?

1 个回复
SO网友:Joy Reynolds

您可以阅读核心代码来查找操作,也可以使用调试方法来查找所需的操作。

放入wp配置。php:

define(\'WP_DEBUG\', true);
define( \'WP_DEBUG_LOG\', true );
然后制作一个包含以下内容的mu插件文件:

<?php 
add_action( \'all\', \'_action_printer\' );
function _action_printer( $a ){
    if (strpos(\'gettext\', $a) === false && strpos(\'escape\', $a) === false) {
      $x = func_get_args();
      $x = print_r($x, true);
      error_log( $x .  "\\n", 3, dirname(__FILE__). \'/../debug.log\');
    }

}
这将向调试输出所有操作的参数。将文件记录在wp content文件夹中,这样它会快速变大并降低站点速度。(我删除了两个,因为它们被大量使用。)只需使用足够长的时间就可以捕获所需的操作,这就是在定制器中切换主题。或者只打印动作名称($a) 而不是为了更小的输出。

一旦您有了操作列表,您就可以修改代码以挂钩到适当的操作。你可能需要检查一下is_customize_preview() 以确保代码在正确的时间运行。请注意,用户可以预览许多主题,而无需实际选择使用一个主题,因此您的主题在Customizer中时不应该写入数据库(因为这只是一个预览)。

结束

相关推荐

Import JSON feed to Wordpress

我们收到了一个URL,它显然是一个JSON文件:http://www.domain.com/tools/export-json/?destination=hawaii 谈到JSON和Wordpress,我完全不懂。有人知道从哪里开始吗?我想我们需要从这个JSON文件中创建单独的帖子。。