Adicionando estilos de customizador com wp_add_inline_style

4

Como eu disse em uma pergunta anterior é ter um tema com centenas de mods, que eu pego em um mod, então eu não tenho que percorrer todos os mods em cada pageload.

Agora, o codex fez o despejo dos estilos de personalização diretamente no cabeçalho, o que não é muito elegante. Há wp_add_inline_style para adicionar css de forma ordenada a uma folha de estilos existente. Isso parece com isso e funciona bem:

$style = get_theme_mod ('all-mods');
wp_add_inline_style ('my-main-style',$style);

Existe um problema, no entanto. Se eu criar um tema filho, os estilos embutidos ainda serão adicionados diretamente após os estilos pai. Isso faz com que eles sejam anulados pelo tema filho css, que é carregado depois do pai para garantir que ele substitua esses estilos. Não é isso que o usuário espera.

Os estilos personalizadores devem ter a prioridade mais alta, então, de alguma forma, devo garantir que eles sejam os últimos a serem carregados na cabeça. Posso detectar se há um tema filho ativo , mas não posso conhecer o identificador do estilo filho para adicionar os estilos in-line a ele .

Neste momento, simplesmente defini um arquivo css vazio, que enfileiroi no final do cabeçalho, e depois adicionei os estilos in-line. Mas isso está longe de ser elegante, e é por isso que tomei esse caminho em primeiro lugar. Alguém sabe de uma abordagem mais inteligente?

    
por cjbj 11.11.2016 / 18:29

1 resposta

1

Você pode tentar detectar se o tema usado atualmente é um filho e, se estiver, apontando o CSS in-line para o estilo correto. Eu não testei essa solução, mas poderia ser um bom ponto de partida.

function mytheme_enqueue_style()
{
    wp_enqueue_style( 'parent-theme-style',get_template_directory_uri() . '/style.css', false );

    if(is_child_theme())
    {
        wp_enqueue_style( 'child-theme-style', get_stylesheet_directory_uri() . '/style.css', array('parent-theme-style')  );
    }

    $style = get_theme_mod ('all-mods');
    $where = is_child_theme() ? 'child-theme-style' : 'parent-theme-style';
    wp_add_inline_style( $where, $style );
}

add_action( 'wp_enqueue_scripts', 'mytheme_enqueue_style' );

NOTA

Existe uma diferença entre get_template_directory_uri() e get_stylesheet_directory_uri() de fato no códice que temos

  

No caso de um tema filho estar sendo usado, esta função retornará   o diretório do tema da criança, URI. Use get_template_directory_uri() para   evite ser substituído por um tema filho.

    
por koMah 03.12.2016 / 18:27