質問: の出力をカスタマイズする方法 wp プラグインからの画像ギャラリーショートコード? 投稿を表示するプラグインを作成しています。また、投稿で使用されている画像ギャラリーも表示する必要があります。しかし、表示される写真の数を制限する必要がありますか?それは可能ですか?
回答: これには2つの方法がありますが、どちらも既存のギャラリのショートコード関数とほぼ同じ機能を持つ関数を作成することを含みます。どちらでもできます。 post_galleryにフックして着信データを操作します(必要に応じて、ギャラリーのショートコード関数をフィルタのベースとして使用できます)。 ギャラリのショートコードの登録を解除し、変更を加えて新しいギャラリのショートコードを登録します(必要に応じて、既存の関数をベースとして使用できます)。 私は このスレッド で似たようなことをしました、そして、私はそれを参照しているだけです。ギャラリのショートコード用のフィルタの例add_filter( 'post_gallery', 'my_post_gallery', 10, 2 ); function my_post_gallery( $output, $attr) { global $post, $wp_locale; static $instance = 0; $instance++; // we're trusting author input, so let's at least make sure it looks like a valid orderby statement 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]; } } elseif ( !empty($exclude) ) { $exclude = preg_replace( '/[^0-9,]+/', '', $exclude ); $attachments = get_children( array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); } else { $attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); } if ( empty($attachments) ) return ''; if ( is_feed() ) { $output = "\n"; foreach ( $attachments as $att_id => $attachment ) $output .= wp_get_attachment_link($att_id, $size, true) . "\n"; return $output; } $itemtag = tag_escape($itemtag); $captiontag = tag_escape($captiontag); $columns = intval($columns); $itemwidth = $columns > 0 ? floor(100/$columns) : 100; $float = is_rtl() ? 'right' : 'left'; $selector = "gallery-{$instance}"; $output = apply_filters('gallery_style', " <style type='text/css'> #{$selector} { margin: auto; } #{$selector} .gallery-item { float: {$float}; margin-top: 10px; text-align: center; width: {$itemwidth}%; } #{$selector} img { border: 2px solid #cfcfcf; } #{$selector} .gallery-caption { margin-left: 0; } </style> <!-- see gallery_shortcode() in wp-includes/media.php --> <div id='$selector' class='gallery galleryid-{$id}'>"); $i = 0; foreach ( $attachments as $id => $attachment ) { $link = isset($attr['link']) && 'file' == $attr['link'] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false); $output .= "<{$itemtag} class='gallery-item'>"; $output .= " <{$icontag} class='gallery-icon'> $link </{$icontag}>"; if ( $captiontag && trim($attachment->post_excerpt) ) { $output .= " <{$captiontag} class='gallery-caption'> " . wptexturize($attachment->post_excerpt) . " </{$captiontag}>"; } $output .= "</{$itemtag}>"; if ( $columns > 0 && ++$i % $columns == 0 ) $output .= '<br style="clear: both" />'; } $output .= " <br style='clear: both;' /> </div>\n"; return $output; } あなたが好きな制限を課すためにその関数を修正してください(それは単なる基本です)..使用しているフックは、ギャラリーのショートコードコールバック関数の内側のwp-includes/media.phpにあります(763行目を参照)。 http://core.trac.wordpress.org/browser/tags/3.0.1/wp-includes/media.php#l745 それが役立つことを願っています.. :)