Modificando um arquivo JS com dados das configurações do plug-in

9

Eu tenho um plugin que, entre outras coisas, tem um arquivo javascript que requer algumas configurações específicas do usuário. Qual seria a melhor maneira de obter essas configurações em javascript a partir dos parâmetros de configuração do plug-in?

Em outras palavras, se eu fizer essas configurações parte da página de configurações onde o usuário pode inseri-las, como seria melhor obter esses valores em javascript? Eu precisaria usar algo para anexar algumas tags de script e defini-las via PHP em cada carregamento de página? Definir um cookie seria a melhor maneira de fazer isso?

Ryan Elkins
fonte
2
Esta é realmente uma ótima pergunta e que eu pretendo fazer. Obrigado por perguntar!
MikeSchinkel

Respostas:

10

melhor é, você usa as funções do WP para isso, um exemplo para vários idiomas:

    add_action( 'admin_enqueue_scripts', 'add_scripts' );
    function add_scripts($where) {
        wp_localize_script( 'post2media', 'post2media_strings', $this->localize_vars() );
    }
    function localize_vars() {

        $strings = array(
                'btntext'    => __( 'Link with post', INPSYDE_P2M_TEXTDOMAIN ),
                'txtallnone' => __( 'Include in gallery:', INPSYDE_P2M_TEXTDOMAIN ),
                'txtall'     => __( 'All', INPSYDE_P2M_TEXTDOMAIN ),
                'txtnone'    => __( 'None', INPSYDE_P2M_TEXTDOMAIN ),
                'ttlcb'      => __( 'Include image in this gallery', INPSYDE_P2M_TEXTDOMAIN )
            );

        return $strings;
    }

use isto no arquivo js:

jQuery(function ($) {
buttonaddfunc = function() {
    btntext = post2media_strings.btntext;

    reg = /\d+/;
    $( '.savesend > .button' ) . each( function() {
        inputname = $( this ) . attr( 'name' );
        number = reg . exec( inputname );
        $( this ) . after( '<input type="submit" value="' + btntext + '" name="link[' + number + ']" class="button">' );
    } );
    $( '.describe-toggle-on' ).unbind( 'click', buttonaddfunc );
};
$( '.describe-toggle-on' ).bind( 'click', buttonaddfunc );

});

Veja também o post de Otto

bueltge
fonte
Eu realmente não entendi muito bem o seu código, mas achei o link muito útil.
Ryan Elkins
11
Isso é realmente excelente, obrigado! Eu tenho me perguntado como fazer isso há muito tempo; obrigado! Eu queria perguntar na lista de hackers wp, mas nunca o fiz. Mais uma vez obrigado.
precisa saber é o seguinte
11
Você pode ver no meu último plugin post2media ( wordpress.org/extend/plugins/post2media ) para ver um exemplo no plugin ao vivo; o plugin não tem muita fonte e acho que isso é ótimo para ler a fonte e entender a solução.
bueltge
11
Aqui está um exemplo mais simples que recebe-lo para baixo para o básico (você tem muita coisa acontecendo no seu exemplo): prelovac.com/vladimir/...
Viper007Bond
1

Existem duas maneiras de fazer isso, uma das quais fiz antes, a outra não, mas usei para arquivos de configuração XML.

O primeiro é incluir as variáveis ​​em uma tag de script dentro do cabeçalho ou rodapé do WP, antes da tag de script em que você inclui seu arquivo JS, por exemplo:

<script type="text/javascript">
    var test = "<?php echo "hello world"; /* the relevant PHP code to echo the data you require */ ?>";
    var slider_type = "<?php echo "nivo"; /* same again */ ?>";
</script>
<script type="text/javascript" src="<?php bloginfo("template_url"); ?>/js/your_js_here"></script>

A outra alternativa seria incluir o JS dentro de um arquivo PHP incluído dentro de uma tag de script.

<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/javascripts.php"></script>

Dentro deste arquivo, você incluiria seu javascript, e como o PHP o analisaria, seria possível incluir chamadas PHP de maneira semelhante à acima, simplesmente fazendo eco dos dados / opções que você precisa. Uma coisa a observar é que você pode precisar definir os cabeçalhos para a saída como text/javascript.

Pessoalmente, prefiro o primeiro método e é o que uso quando tenho configurações alteráveis ​​pelo usuário que afetam os arquivos javascript.

ninguém
fonte
Boa redação. Isto é exatamente o que eu tenho feito. OTOH, @bueltge tem a resposta que provavelmente todos procuramos; Eu sei que tenho.
MikeSchinkel