如何使用定制器自定义快捷代码

时间:2016-05-19 作者:Mark Kaplun

一般上下文:我有一个插件,它实现了一个小部件,我想把小部件变成一个短代码。

小部件有许多选项,其中一些选项是互斥的,在任何情况下,在内容中有20个属性的小部件都不是好的UX。

解决方案似乎是使用定制器,但我如何让它知道短代码的存在以及在哪里存储设置?

有一个插件将一种虚拟侧栏作为短代码,它只会忽略自定义程序。

为了便于讨论,我们可以假设每个内容只有一小部分(少于4个)这样的短代码,因此规模不是问题。

我在考虑两个方向,但都有一些“缺失环节”

创建虚拟边栏

问题是:(较小)将短代码映射到侧栏,以及(较大)阻止用户尝试将小部件拖入或拖出侧栏

  • 使用Posteta存储设置

    我不知道有什么东西可以让定制者更改预定时间

  • 使用选项全局存储设置,而不使其成为实际的小部件。

    从模块化的角度来看,这听起来并不是一件令人垂涎三尺的事

  • 是否有我错过的选项,或者我只是对列出的选项太过担心?

    1 个回复
    最合适的回答,由SO网友:Mark Kaplun 整理而成

    对我结束所做的事情进行了高层次的描述,实际上实现这样一个实现并节省您为小部件和定制器表单编写不同代码的工作量并不太糟糕,但还有许多小细节需要处理。

    将设置存储为帖子的元值创建适当的自定义程序节将节与仅在自定义程序上下文中使用的“虚拟”选项相关联。这些选项将所有短代码的设置存储为一个数组data-customize-setting-link 将与相关设置关联的属性

    ob_start(); $widget->form(array()); $form = ob_get_clean(); $form = preg_replace_callback(\'/<(input|select)\\s+.*name=("|\\\').*\\[\\d*\\]\\[([^\\]]*)\\][^>]*>/\', function ($matches) use ($p, $wp_customize, $meta) { $setting = \'_virtual-\'.WIDGET_BASE_ID.\'[\'.$p->ID.\'][\'.$matches[3].\']\'; $wp_customize->add_setting( $setting, array( \'default\' => $meta[$matches[3]], // set default to current value \'type\' => \'option\' ) );

      return str_replace(\'<\'.$matches[1],\'<\'.$matches[1].\' data-customize-setting-link="\'.$setting.\'"\',$matches[0]);
        },
        $form
    );
    
    对于实际呈现代码,请检查页面是否正在自定义,如果是,请使用该选项,否则请使用meta

    相关推荐

    SHORTCODE_ATTS()中的$ATTS参数是什么?

    这个WordPress developers reference page for shortcode_atts() 国家:$atts(array)(必选)用户在shortcode标记中定义的属性。但我不理解这个定义。例如,在WP Frontend Profile 插件:$atts = shortcode_atts( [ \'role\' => \'\', ], $atts ); 据我所知,shortcode\