web-dev-qa-db-fra.com

Shortcodes imbriqués

J'utilise 2 plugins dans mon blog wordpress - WP-Members et Partager un dossier Dropbox . Je veux faire quelque chose comme ça:

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

Est-ce possible?

2
input

Vous ne pouvez pas utiliser des codes courts comme celui-ci. L'analyseur ne lirait pas cela comme vous le souhaitez.

Mais il existe une solution de contournement: piratez le shortcode dropbox-foldershare-hyno, exécutez la fonction de rappel pour le wp-members sur le lien et transmettez le résultat au rappel dropbox-foldershare-hyno d'origine.

Exemple de code, non testé:

// 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 );
}

Vous pouvez maintenant utiliser le shortcode [dropbox-foldershare-hyno] et transmettre une valeur pour l'attribut link qui doit être convertie à partir des membres WP avant que Dropbox Folder Share ne le récupère.

3
fuxia

Comment pouvons-nous le faire dans un proche avenir ;-)

Lorsque le plugin dropbox-foldershare-hyno devient WordPress 3.6 ready, nous pouvons le faire:

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;
}

pour écraser l'attribut link du shortcode:

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

shortcode, si le filtre shortcode_atts_{$shortcode} correspondant est shortcode_atts_dfh.

Vous pouvez en lire plus à ce sujet ici .

3
birgire

Les codes courts imbriqués ne fonctionnent que dans certaines circonstances spécifiques:

  • Seuls les codes courts inclus peuvent être imbriqués. En d'autres termes, le style de [shortcode] content [/ shortcode]. Les codes abrégés englobants tels que [shortcode attribut = "foo"] ne peuvent pas être imbriqués.
  • Même dans ce cas, le shortcode externe doit être configuré correctement en appelant do_shortcodes() sur le contenu renvoyé. (ref: API Shortcodes: Shortcodes imbriqués )

Donc, dans votre exemple, la réponse est probablement non, en raison du premier point ci-dessus. Mais pour être sûr, vous devrez vérifier la documentation de vos plugins spécifiques pour voir si l'auteur donne d'autres options sur la façon d'utiliser leurs codes abrégés.

2
sabreuse