admin管理员组文章数量:1310043
I have problem with custom gallery shortcode and missing first image in each gallery block. For example: [gallery ids="1,2,3,4,5"] show only 2,3,4,5 pictures.
This custom shortcode is part of wordpress plugin which make custom feed. It works correctly on my second site with same plugins and theme (tested on localhost). I've tried to update whole wordpress installation, disabled all plugins with no success. So the problem is somewhere in db or with server? I'm do not have any idea how debug this strange behavior and need some advice please.
Custom gallery shortcode:
add_shortcode('gallery', 'gallery_shortcode');
add_filter( 'post_gallery', 'yturbo_gallery', 9999999, 2 );
$content = do_shortcode($content);
$content = yturbo_do_gallery($content);
$ytad4meta = get_post_meta($post->ID, 'ytad4meta', true);
$ytad5meta = get_post_meta($post->ID, 'ytad5meta', true);
function yturbo_gallery( $output, $attr ) {
$yturbo_options = get_option('yturbo_options');
if ( ! is_feed($yturbo_options['ytrssname']) ) {return;}
$post = get_post();
static $instance = 0;
$instance++;
if ( ! empty( $attr['ids'] ) ) {
// 'ids' is explicitly ordered, unless you specify otherwise.
if ( empty( $attr['orderby'] ) ) {
$attr['orderby'] = 'post__in';
}
$attr['include'] = $attr['ids'];
}
$html5 = current_theme_supports( 'html5', 'gallery' );
$atts = shortcode_atts( array(
'order' => 'ASC',
'orderby' => 'menu_order ID',
'id' => $post ? $post->ID : 0,
'itemtag' => $html5 ? 'figure' : 'dl',
'icontag' => $html5 ? 'div' : 'dt',
'captiontag' => $html5 ? 'figcaption' : 'dd',
'columns' => 3,
'size' => 'thumbnail',
'include' => '',
'exclude' => '',
'link' => ''
), $attr, 'gallery' );
$id = intval( $atts['id'] );
$atts['include'] = str_replace(array("»","″"), "", $atts['include']);
$atts['orderby'] = str_replace(array("»","″"), "", $atts['orderby']);
$atts['order'] = str_replace(array("»","″"), "", $atts['order']);
$atts['exclude'] = str_replace(array("»","″"), "", $atts['exclude']);
if ( ! empty( $atts['include'] ) ) {
$_attachments = get_posts( array( 'include' => $atts['include'], 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'],'offset' => 0 ) );
$attachments = array();
foreach ( $_attachments as $key => $val ) {
$attachments[$val->ID] = $_attachments[$key];
}
} elseif ( ! empty( $atts['exclude'] ) ) {
$attachments = get_children( array( 'post_parent' => $id, 'exclude' => $atts['exclude'], 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'],'offset' => 0 ) );
} else {
$attachments = get_children( array( 'post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'],'offset' => 0 ) );
}
if ( empty( $attachments ) ) {
return '';
}
$output = PHP_EOL.'<div data-block="gallery">'.PHP_EOL;
foreach ( $attachments as $id => $attachment ) {
$output .= '<img src="'.wp_get_attachment_url($id) . '"/>'.PHP_EOL;
}
$output .= '</div>'.PHP_EOL;
return $output;
}
I've tried to edit plugin code as it suggested here for gallery shortcode, but in this case both installations show all images except first.
function yturbo_gallery( $output, $attr ) {
$yturbo_options = get_option('yturbo_options');
if ( ! is_feed($yturbo_options['ytrssname']) ) {return;}
$output = "<div data-block=\"gallery\">";
$posts = get_posts(array('include' => $attr['ids'],'post_type' => 'attachment'));
foreach($posts as $imagePost){
$output .= "<img src='".wp_get_attachment_image_src($imagePost->ID, 'full')[0]."'>";
}
$output .= "</div>";
return $output;
}
I've tested loops with 'offset' => 0
with no results.
I have problem with custom gallery shortcode and missing first image in each gallery block. For example: [gallery ids="1,2,3,4,5"] show only 2,3,4,5 pictures.
This custom shortcode is part of wordpress plugin which make custom feed. It works correctly on my second site with same plugins and theme (tested on localhost). I've tried to update whole wordpress installation, disabled all plugins with no success. So the problem is somewhere in db or with server? I'm do not have any idea how debug this strange behavior and need some advice please.
Custom gallery shortcode:
add_shortcode('gallery', 'gallery_shortcode');
add_filter( 'post_gallery', 'yturbo_gallery', 9999999, 2 );
$content = do_shortcode($content);
$content = yturbo_do_gallery($content);
$ytad4meta = get_post_meta($post->ID, 'ytad4meta', true);
$ytad5meta = get_post_meta($post->ID, 'ytad5meta', true);
function yturbo_gallery( $output, $attr ) {
$yturbo_options = get_option('yturbo_options');
if ( ! is_feed($yturbo_options['ytrssname']) ) {return;}
$post = get_post();
static $instance = 0;
$instance++;
if ( ! empty( $attr['ids'] ) ) {
// 'ids' is explicitly ordered, unless you specify otherwise.
if ( empty( $attr['orderby'] ) ) {
$attr['orderby'] = 'post__in';
}
$attr['include'] = $attr['ids'];
}
$html5 = current_theme_supports( 'html5', 'gallery' );
$atts = shortcode_atts( array(
'order' => 'ASC',
'orderby' => 'menu_order ID',
'id' => $post ? $post->ID : 0,
'itemtag' => $html5 ? 'figure' : 'dl',
'icontag' => $html5 ? 'div' : 'dt',
'captiontag' => $html5 ? 'figcaption' : 'dd',
'columns' => 3,
'size' => 'thumbnail',
'include' => '',
'exclude' => '',
'link' => ''
), $attr, 'gallery' );
$id = intval( $atts['id'] );
$atts['include'] = str_replace(array("»","″"), "", $atts['include']);
$atts['orderby'] = str_replace(array("»","″"), "", $atts['orderby']);
$atts['order'] = str_replace(array("»","″"), "", $atts['order']);
$atts['exclude'] = str_replace(array("»","″"), "", $atts['exclude']);
if ( ! empty( $atts['include'] ) ) {
$_attachments = get_posts( array( 'include' => $atts['include'], 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'],'offset' => 0 ) );
$attachments = array();
foreach ( $_attachments as $key => $val ) {
$attachments[$val->ID] = $_attachments[$key];
}
} elseif ( ! empty( $atts['exclude'] ) ) {
$attachments = get_children( array( 'post_parent' => $id, 'exclude' => $atts['exclude'], 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'],'offset' => 0 ) );
} else {
$attachments = get_children( array( 'post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'],'offset' => 0 ) );
}
if ( empty( $attachments ) ) {
return '';
}
$output = PHP_EOL.'<div data-block="gallery">'.PHP_EOL;
foreach ( $attachments as $id => $attachment ) {
$output .= '<img src="'.wp_get_attachment_url($id) . '"/>'.PHP_EOL;
}
$output .= '</div>'.PHP_EOL;
return $output;
}
I've tried to edit plugin code as it suggested here for gallery shortcode, but in this case both installations show all images except first.
function yturbo_gallery( $output, $attr ) {
$yturbo_options = get_option('yturbo_options');
if ( ! is_feed($yturbo_options['ytrssname']) ) {return;}
$output = "<div data-block=\"gallery\">";
$posts = get_posts(array('include' => $attr['ids'],'post_type' => 'attachment'));
foreach($posts as $imagePost){
$output .= "<img src='".wp_get_attachment_image_src($imagePost->ID, 'full')[0]."'>";
}
$output .= "</div>";
return $output;
}
I've tested loops with 'offset' => 0
with no results.
- Have you checked that the IDs you've provided are actually attachments? – cameronjonesweb Commented Jan 19, 2021 at 20:49
- loop has 'post_type' => 'attachment', so I think they are actually attachments – Nar Commented Jan 19, 2021 at 22:06
1 Answer
Reset to default 0The problem was in additional symbols ”
in $attr['ids']
array. So I've changed:
$atts['include'] = str_replace(array("»","″","”"), "", $atts['include']);
$atts['orderby'] = str_replace(array("»","″","”"), "", $atts['orderby']);
$atts['order'] = str_replace(array("»","″","”"), "", $atts['order']);
$atts['exclude'] = str_replace(array("»","″","”"), "", $atts['exclude']);
And now everything ok.
本文标签: loopMissing image in gallery shortcode in custom feed
版权声明:本文标题:loop - Missing image in gallery shortcode in custom feed 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1741819816a2399296.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论