Códigos de acesso aninhados

2

Estou usando 2 plugins no meu blog wordpress - WP-Members e Dropbox Folder Share . Eu quero fazer algo assim:

[dropbox-foldershare-hyno link="[wp-members field="some_link"]" ver_como='lista']

Isso é possível?

    
por input 20.05.2013 / 19:33

3 respostas

3

Você não pode usar códigos de acesso como este. O analisador não leria como você deseja.

Mas há uma solução alternativa: Hijack o shortcode dropbox-foldershare-hyno , executar a função de retorno de chamada para o wp-members no link e passar o resultado para o retorno de chamada dropbox-foldershare-hyno original.

Código de amostra, não testado:

// wait until the other plugins are loaded
add_action( 'wp_loaded', 'wpse_100100_shortcode_magic' );

function wpse_100100_shortcode_magic()
{
    add_shortcode(
        'dropbox-foldershare-hyno',  
        'wpse_100100_shortcode_replacement' 
    );
}

function wpse_100100_shortcode_replacement( $atts )
{
    global $bvwidget;

    if ( isset ( $atts['link'] ) )
        $atts['link'] = wpmem_shortcode( array( 'field' => $atts['link'] ) );

    return $bvwidget->replace_shortcode( $atts );
}

Agora você pode usar o shortcode [dropbox-foldershare-hyno] e passar um valor para o atributo link que deve ser convertido dos membros do WP antes que o Dropbox Folder Share entre em contato.

    
por fuxia 20.05.2013 / 19:58
3

Como podemos fazer isso em um futuro próximo; -)

Quando o dropbox-foldershare-hyno plugin se torna WordPress 3.6 pronto, podemos fazer isso:

add_filter('shortcode_atts_dfh','overwrite_dfh_atts',10,3);
function overwrite_dfh_atts($out, $pairs, $atts){
    if($atts['link'])
        $out['link'] = do_shortcode( sprintf( '[wp-members field="%s"]', esc_attr( $atts['link'] ) ) ); 

    return $out;
}

para substituir o atributo de link do shortcode:

[dropbox-foldershare-hyno link="some value for the wp-member field attribute"] 

shortcode, se o filtro shortcode_atts_{$shortcode} correspondente for shortcode_atts_dfh .

Você pode ler mais sobre aqui .

    
por birgire 20.05.2013 / 21:28
2

Os códigos de acesso aninhados só funcionam em determinadas circunstâncias específicas:

  • Somente códigos de acesso fechados podem ser aninhados. Em outras palavras, o estilo de [shortcode] content [/ shortcode]. Códigos de acesso auto-delimitados como [shortcode attribute="foo"] não podem ser aninhados.
  • Mesmo nesse caso, o shortcode externo deve ser configurado corretamente chamando do_shortcodes() no conteúdo que está sendo retornado. (ref: API de códigos de acesso: Códigos de nós aninhados )

Assim, no seu exemplo, a resposta provavelmente é não, devido ao primeiro ponto acima. Mas, para ter certeza, você precisa verificar a documentação dos plugins específicos para ver se o autor oferece outras opções de como usar seus códigos de acesso específicos.

    
por sabreuse 20.05.2013 / 19:56