My solution for this was:
- Assign shortcode html wrapper an ID.
- Generate custom CSS for that ID
- Store generated CSS in a PHP global variable, or better in a static class property
- Use wp_add_inline_styles to add stored CSS
if( !function_exists( 'videobox_inline_styles' ) ) {
function videobox_inline_styles(){
wp_add_inline_style( 'videobox-collected-styles', videobox_Layout_Compilator::$inline_styles );
}
add_action( 'wp_enqueue_scripts', 'videobox_inline_styles' );
}
In Shortcodes:
/**
* Example:
*/
$css = "#element-$element_id { background-color: $options['background_color']; }";
videobox_Layout_Compilator::$inline_styles .= $css;