私はWordPressギャラリーにコンテナdivを追加しようとしています、私はこれまでのところこれを持っています....
function gallery_custom( $output ) {
$return = '<div class="mydiv">';
$return = $output;
$return = '</div>';
return $return;
}
add_filter( 'post_gallery', 'gallery_custom', 10, 3 );
これは何も返さないことで、間違っているところで何かアイデアはありますか?
これを達成するためには、次のようにもっとカスタムコードを開発する必要があります。
function gallery_custom( $output, $attr ) {
global $post;
if ( isset($attr['orderby'] ) ) {
$attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] );
if ( ! $attr['orderby'] ) {
unset( $attr['orderby'] );
}
}
extract(shortcode_atts(array(
'order' => 'ASC',
'orderby' => 'menu_order ID',
'id' => $post->ID,
'itemtag' => 'dl',
'icontag' => 'dt',
'captiontag' => 'dd',
'columns' => 3,
'size' => 'thumbnail',
'include' => '',
'exclude' => ''
), $attr ));
$id = intval( $id );
if ('Rand' == $order ) $orderby = 'none';
if ( ! empty( $include ) ) {
$include = preg_replace('/[^0-9,]+/', '', $include);
$_attachments = get_posts(array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby));
$attachments = array();
foreach ($_attachments as $key => $val) {
$attachments[$val->ID] = $_attachments[$key];
}
}
if ( empty( $attachments ) ) return '';
$output = '<div class="mydiv">';
// Here's your actual output, you may customize it to your need
$output .= "<div class='gallery galleryid-$columns gallery-columns-$columns gallery-size-$size'>";
// Now you loop through each attachment
foreach ( $attachments as $id => $attachment ) {
// Fetch the thumbnail (or full image, it's up to you)
$img = wp_get_attachment_image_src( $id, $size );
$output .= '<figure class="gallery-item"><div class="gallery-icon landscape">';
$output .= '<img src="' . $img[0] . '" width="' . $img[1] . '" height="' . $img[2] . '" alt="" />';
$output .= '</div>';
if ( $captiontag && trim($attachment->post_excerpt) ) {
$output .= "
<{$captiontag} class='gallery-caption'>
" . wptexturize($attachment->post_excerpt) . "
</{$captiontag}>";
}
$output .= '</figure>';
}
$output .= '</div></div>';
return $output;
}
add_filter( 'post_gallery', 'gallery_custom', 10, 2 );
HTMLラッパーをギャラリーに追加するには、post_gallery
フィルターを使用します。これは完全にコメントされた例です。
add_filter( 'post_gallery', 'gallery_custom', 10, 3 );
/**
* Filters the default gallery shortcode output.
*
* If the filtered output isn't empty, it will be used instead of generating
* the default gallery template.
*
* @see gallery_shortcode()
*
* @param string $output The gallery output. Default empty.
* @param array $attr Attributes of the gallery shortcode.
* @param int $instance Unique numeric ID of this gallery shortcode instance.
*/
function gallery_custom( $output, $attr, $instance ) {
// Remove the filter to prevent infinite loop.
remove_filter( 'post_gallery', 'gallery_custom', 10, 3 );
// Add opening wrapper.
$return = '<div class="mydiv">';
// Generate the standard gallery output.
$return .= gallery_shortcode( $attr );
// Add closing wrapper.
$return .= '</div>';
// Add the filter for subsequent calls to gallery shortcode.
add_filter( 'post_gallery', 'gallery_custom', 10, 3 );
// Finally, return the output.
return $return;
}
gallery_custom()
では、gallery_shortcode()
を呼び出す前にpost_gallery
フィルターを削除することが重要です。そうでなければ、無限ループに陥ります。
出力は$return
に連結する必要があることに注意してください。元のコードでは、文字列の初期化後に$return
の代わりに=
が使用されるため、.=
は継続的に上書きされています。
メインの出力は標準のギャラリー出力関数gallery_shortcode( $attr );
を使って生成されます。この時点でフィルタは削除されているので、この呼び出しではフィルタは適用されません。
ギャラリの出力が$return
に連結された後、終了するHTMLタグを追加し、フィルタを追加して、次回ギャラリのショートコード関数が呼び出されたときに実行されるようにします。
最後に出力を返します。
[gallery]
shortcode関数を置き換えます。これは問題を解決するための別のアプローチです。今回はデフォルトのギャラリ出力関数gallery_shortcode()
がgallery
ショートコード文字列から削除されています。次に、置換関数wpse_custom_gallery_shortcode()
が元のgallery
ショートコード文字列に配線されます。
// Replace the default [gallery] shortcode function with a custom function.
add_action( 'init', 'wpse_replace_gallery_shortcode' );
function wpse_replace_gallery_shortcode() {
remove_shortcode( 'gallery', 'gallery_shortcode' );
add_shortcode( 'gallery', 'wpse_custom_gallery_shortcode' );
}
// Customized gallery shortcode function.
// See gallery_shortcode() for documentation.
function wpse_custom_gallery_shortcode( $attr ) {
$gallery = gallery_shortcode( $attr );
if ( $gallery ) {
return '<div class="mydiv">' . $gallery . '</div>';
}
}