根据奥托的建议,我修改了我的函数(见下文),它成功了!
// Custom Gallery Code For Flipboard/Pulse/Google Currents Feeds
add_filter(\'post_gallery\', \'flipboard_gallery_shortcode\', 10, 2);
function flipboard_gallery_shortcode($output, $attr) {
global $post;
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\' => \'full\',
\'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 \'\';
// Modifying for a different gallery output ONLY in my custom feed
if ( is_feed( \'flipboard_feed\' ) ) {
$output = \'<section class="fl-slideshow">\';
foreach ( $attachments as $att_id => $attachment )
$output .= \'<figure>\' . wp_get_attachment_image($att_id, \'full\') . \'<figcaption>\' . wptexturize($attachment->post_excerpt) . \'</figcaption></figure>\';
$output .= \'</section>\';
return $output;
}
// Let the original function return the default output for other feeds and posts
return \'\';
}
EDIT: 为了稍微提高速度,可以将上面的代码重写为(感谢Otto!):
// Custom Gallery Code For Flipboard/Pulse/Google Currents Feeds
add_filter(\'post_gallery\', \'flipboard_gallery_shortcode\', 10, 2);
function flipboard_gallery_shortcode($output, $attr) {
// Modifying for a different gallery output ONLY in my custom feed
if ( is_feed( \'flipboard_feed\' ) ) {
global $post;
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 \'\';
// Essentially these are only changes I\'ve made
$output = \'<section class="fl-slideshow">\';
foreach ( $attachments as $att_id => $attachment )
$output .= \'<figure>\' . wp_get_attachment_image($att_id, \'full\') . \'<figcaption>\' . wptexturize($attachment->post_excerpt) . \'</figcaption></figure>\';
$output .= \'</section>\';
return $output;
}
// Let the original function return the default output for other feeds and posts
return \'\';
}
PS: 任何使用Jetpack Carousel的人都不必担心。上面的函数只修改自定义提要中的输出,因此就我所见,它不会影响任何前端插件