web-dev-qa-db-ja.com

キャプションを属性として含まないキャプションのショートコード

最近 bonpress テーマをインストールしましたが、キャプションが正しく表示されないという問題があります。キャプションがWordpressでどのように機能するかを理解しようとすればするほど、私のインストールでは何も起こらないと疑うようになります。

投稿を作成してキャプション付きの画像を挿入すると、Wordpressは次のショートコードを作成します。

[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]

最初の例はこちらサンプルコードはこちら (bonpressで使用)など、いくつかのページを読むと、次のように表示されます。キャプションは属性として渡されるべきです。例えば:

[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]

属性としてcaptionを使用して手動でショートコードを入力すると、正しくレンダリングされます。私のインストールで何かが壊れていてそれがこのようにビルドされていないのですか?

更新:キャプションのショートコードは/wp-admin/includes/media.phpのimage_add_captionによって作成されます(WP 3.4.2の134行目)。ショートコードはこのコードに従って正しく構築されているので、img_caption_shortcodeフィルタのカスタマイズに関して私が見つけることができるすべてのコードがキャプションが属性であると仮定しているのはなぜだろうか?

1
Mike S.

/* Remove [caption] in-line stylingfunction.phpという行を見つけます。

コメントアウト

/*
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>';
}    

*/

.entry .wp-caption-textstyle.cssを見つけます。あなたの好みに合うようにスタイルを変更してください。

問題が修正されました。これで終わりです。

2
Ken Shoufer

コードの実行後に次の2行を追加することで、ショートコードを強制的にデフォルトに戻すことができます。

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

ショートコードを コアコールバック に戻し、fixed_img_caption_shortcodeが壊したことを元に戻します。

0
s_ha_dum

ここで で不完全な解を見つけました 。次の行をテーマのfixed_image_caption_shortcode関数に追加すると(以前はここ と同じ )、意図したとおりにキャプションがレンダリングされますが、属性。

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

この解決策で十分ですが、うまくいけば誰かがより良い解決策を持っている...

0
Mike S.