Is there a way to extract the url from next_image_link?
I want the image on the attachment page to link to the next image, but i didn't manage to figure out how to do it.
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It only takes a minute to sign up.
Sign up to join this communityIs there a way to extract the url from next_image_link?
I want the image on the attachment page to link to the next image, but i didn't manage to figure out how to do it.
The function below is derived from adjacent_image_link()
function. You can get both previous and next image source by this function. It can be used inside or outside loop.
// get next image src
$src = wpse145194_get_adjacent_image_link();
// get previous image src
$src = wpse145194_get_adjacent_image_link(true);
function wpse145194_get_adjacent_image_link( $prev = false, $size = 'thumbnail', $post_id = false) {
if(!$post_id)
$post = get_post();
else
$post = get_post($post_id);
$attachments = array_values( get_children( array( 'post_parent' => $post->post_parent, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID' ) ) );
foreach ( $attachments as $k => $attachment )
if ( $attachment->ID == $post->ID )
break;
$k = $prev ? $k - 1 : $k + 1;
$link = $attachment_id = null;
if ( isset( $attachments[ $k ] ) ) {
$attachment_id = $attachments[ $k ]->ID;
// $link = wp_get_attachment_link( $attachment_id, $size, true, false, false );
$link = get_attachment_link( $attachment_id);
}
return $link;
}
Code not tested
<?php echo $src = wpse145194_get_adjacent_image_src(); ?>
and <?php echo wpse145194_get_adjacent_image_src(); ?>
both output "Array".
I solved my "problem" using a function from the twentyfourteen theme :
if ( ! function_exists( 'twentyfourteen_the_attached_image' ) ) :
/**
* Print the attached image with a link to the next attached image.
*
* @since Twenty Fourteen 1.0
*/
function twentyfourteen_the_attached_image() {
$post = get_post();
/**
* Filter the default Twenty Fourteen attachment size.
*
* @since Twenty Fourteen 1.0
*
* @param array $dimensions {
* An array of height and width dimensions.
*
* @type int $height Height of the image in pixels. Default 810.
* @type int $width Width of the image in pixels. Default 810.
* }
*/
$attachment_size = apply_filters( 'twentyfourteen_attachment_size', array( 810, 810 ) );
$next_attachment_url = wp_get_attachment_url();
/*
* Grab the IDs of all the image attachments in a gallery so we can get the URL
* of the next adjacent image in a gallery, or the first image (if we're
* looking at the last image in a gallery), or, in a gallery of one, just the
* link to that image file.
*/
$attachment_ids = get_posts( array(
'post_parent' => $post->post_parent,
'fields' => 'ids',
'numberposts' => -1,
'post_status' => 'inherit',
'post_type' => 'attachment',
'post_mime_type' => 'image',
'order' => 'ASC',
'orderby' => 'menu_order ID',
) );
// If there is more than 1 attachment in a gallery...
if ( count( $attachment_ids ) > 1 ) {
foreach ( $attachment_ids as $attachment_id ) {
if ( $attachment_id == $post->ID ) {
$next_id = current( $attachment_ids );
break;
}
}
// get the URL of the next image attachment...
if ( $next_id ) {
$next_attachment_url = get_attachment_link( $next_id );
}
// or get the URL of the first image attachment.
else {
$next_attachment_url = get_attachment_link( array_shift( $attachment_ids ) );
}
}
printf( '<a href="%1$s" rel="attachment">%2$s</a>',
esc_url( $next_attachment_url ),
wp_get_attachment_image( $post->ID, $attachment_size )
);
}
endif;
Then use <?php twentyfourteen_the_attached_image(); ?>
to output the image linking to the next image.