web-dev-qa-db-fra.com

Shortcodes de légende n'incluant pas la légende en tant qu'attribut

J'ai récemment installé le thème bonpress et je ne parviens pas à afficher correctement les légendes. Plus j'essaie de comprendre comment les légendes sont supposées fonctionner dans Wordpress, plus je soupçonne que quelque chose ne se passe pas bien avec mon installation.

Lors de la création d'une publication et de l'insertion d'une image avec une légende, Wordpress crée le shortcode suivant:

[caption id="attachment_40" align="alignleft" width="1024"]<a href="http://wordpress.local/wp-content/uploads/2012/10/2012-10-30-11.38.36.jpg"><img class="size-large wp-image-40" title="Torn motorcycle cover" src="http://wordpress.local/wp-content/uploads/2012/10/2012-10-30-11.38.36-e1351653272372-1024x984.jpg" alt="" width="1024" height="984" /></a> That's what I get for only spending $15 on a motorcycle cover[/caption]

En parcourant plusieurs pages telles que , le premier exemple ici et le code exemple ici (utilisé par bonpress), il semble que la légende doit être passée en tant qu'attribut, par exemple:

[caption id="attachment_40" align="alignleft" width="1024" caption="That's what I get for only spending $15 on a motorcycle cover"]<a href="http://wordpress.local/wp-content/uploads/2012/10/2012-10-30-11.38.36.jpg"><img class="size-large wp-image-40" title="Torn motorcycle cover" src="http://wordpress.local/wp-content/uploads/2012/10/2012-10-30-11.38.36-e1351653272372-1024x984.jpg" alt="" width="1024" height="984" /></a>[/caption]

Si je saisis manuellement le shortcode avec caption en tant qu'attribut, le rendu est correct. Est-ce que quelque chose de cassé dans mon installation fait en sorte qu'il ne soit pas construit de cette façon?

Mise à jour: Le shortcode de légende est construit par image_add_caption dans /wp-admin/includes/media.php (ligne 134 dans WP 3.4.2). Les codes abrégés sont correctement construits conformément à ce code. Cela me laisse donc à me demander pourquoi tout le code que je peux trouver concernant la personnalisation du filtre img_caption_shortcode suppose que la légende est un attribut?

1
Mike S.

Recherchez la ligne /* Remove [caption] in-line styling dans function.php.

Commenter:

/*
add_shortcode('wp_caption', 'fixed_img_caption_shortcode');
add_shortcode('caption', 'fixed_img_caption_shortcode');
function fixed_img_caption_shortcode($attr, $content = null) {
    // Allow plugins/themes to override the default caption template.
    $output = apply_filters('img_caption_shortcode', '', $attr, $content);
    if ( $output != '' ) return $output;
    extract(shortcode_atts(array(
        'id'=> '',
        'align' => 'alignnone',
        'width' => '',
        'caption' => ''), $attr));
    if ( 1 > (int) $width || empty($caption) )
    return $content;
    if ( $id ) $id = 'id="' . esc_attr($id) . '" ';
    return '<div ' . $id . 'class="wp-caption ' . esc_attr($align)
    . '">'
    . do_shortcode( $content ) . '<p class="wp-caption-text">'
    . $caption . '</p></div>';
}    

*/

Trouvez .entry .wp-caption-text dans style.css. Changez le style selon votre goût.

Problème résolu. Vous avez terminé.

2
Ken Shoufer

Vous devriez pouvoir forcer le shortcode à revenir à default-- pour le re-détourner - en ajoutant ces deux lignes après l'exécution de ce code:

add_shortcode('wp_caption', 'img_caption_shortcode');
add_shortcode('caption', 'img_caption_shortcode');

Cela devrait redéfinir le shortcode sur le rappel de base et annuler tout ce que fixed_img_caption_shortcode aurait cassé.

0
s_ha_dum

J'ai trouvé une solution imparfaite sur ici . L'ajout des lignes suivantes à la fonction fixed_image_caption_shortcode du thème (auparavant identique à celle here ) rend les légendes comme prévu, mais n'ajoute pas la légende en tant que attribut.

if ( ! isset( $attr['caption'] ) ) {
    if ( preg_match( '#((?:<a [^>]+>\s*)?<img [^>]+>(?:\s*</a>)?)(.*)#is', $content, $matches ) ) {
        $content = $matches[1];
        $attr['caption'] = trim( $matches[2] );
    }
}

Cette solution est suffisante, mais j'espère que quelqu'un aura une meilleure solution ...

0
Mike S.