alterando wp-admin / widgets.php


11

Queremos projetar a página de widgets no painel de administração de maneira um pouco diferente, principalmente para ajudar o administrador do site a entender onde cada widget aparecerá no site:

insira a descrição da imagem aqui

Para isso, precisamos alterar o HTML que o widgets.php renderiza (simplesmente alterar o css não é suficiente). Como faríamos isso sem tocar o âmago?


Onde o painel para arrastar os widgets seria colocado com a abordagem acima?
Sanchothefat 5/03/12

@sanchothefat embaixo
Lea Cohen

Por que não seguir em frente e enviar um patch para o núcleo. Parece uma melhoria que vale a pena ... Então, ao registrar uma barra lateral, um parâmetro adicional seria especificar um local. Se nenhum especificado, ele assume que é estruturado como é agora (à direita)
Taylor Dewey

Respostas:



4

Não consigo tirar a pergunta da cabeça, mas não tenho tempo para uma solução completa. Então, apenas anotei minha ideia aqui, depois estabelecerei uma pequena recompensa.

  • Há uma ação 'widgets_admin_page'em wp-admin/widgets.phpcima do outro conteúdo. Você pode colocar uma caixa de visualização aqui.
    Código de amostra:

    add_action( 'widgets_admin_page', 'show_widget_preview' );
    function show_widget_preview()
    {
        $preview_widgets = $GLOBALS['wp_registered_sidebars'];
        unset ( $preview_widgets['wp_inactive_widgets'] );
    
        print '<div style="border:2px solid #ddf;padding:20px">'
        . '<pre>' . htmlspecialchars( print_r( $preview_widgets, TRUE ) ) . '</pre>'
        . '</div>';
    }
    

    Isso imprime uma matriz de todas as barras laterais registradas. Você precisa percorrer todas as barras laterais para encontrar os widgets registrados.

  • Para tornar a visualização útil, você precisa de dois arquivos: um modelo HTML e uma folha de estilos.
    Eu usaria add_theme_support().
    Código de exemplo para o tema functions.php:

    add_theme_support( 
        'widget_preview', 
        array ( 
            'template'   => get_stylesheet_directory() . '/widget-preview.php', 
            'stylesheet' => get_stylesheet_directory() . '/widget-preview.css' 
        ) 
    );
  • Em show_widget_preview()enfileirar a folha de estilos e carregar o modelo. Renderize as barras laterais registradas nos espaços reservados predefinidos em widget-preview.php.

  • Atualize o modelo por AJAX depois que o usuário pressionou o botão Salvar em um widget.

  • Desafios: leve em consideração o modo de acessibilidade, pequenas janelas e conflitos de CSS. Mostrar uma mensagem útil quando nenhuma barra lateral estiver registrada (descrições da barra lateral?). O que deve acontecer quando um usuário tenta arrastar um widget para a caixa de visualização? :)


obrigado por pensar nisso, @toscho! Atualmente, estou trabalhando em outros projetos, mas terei que voltar a este e verificaremos sua solução e informaremos você. Obrigado novamente!
Lea Cohen

0

a resposta curta é que você não pode, não sem tocar no núcleo.

no entanto, você pode definir a descrição de cada área do widget (o texto abaixo do título da área do widget) na função register_sidebar.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.