0

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.

0

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.

Uses

 // get next image src
 $src = wpse145194_get_adjacent_image_link();


 // get previous image src
 $src = wpse145194_get_adjacent_image_link(true);

Function

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

10
  • Thanks for the answer. Sadly i can't figure out how to use it. I created a snippet (using the code snippet plugin) containing the function and used $src = wpse145194_get_adjacent_image_src(); inside href atribute: <a href="<?php $src = wpse145194_get_adjacent_image_src(); ?>">dddd</a>
    – CK13
    May 22 '14 at 5:40
  • You have to echo it like echo wpse145194_get_adjacent_image_src();
    – Sisir
    May 22 '14 at 5:43
  • Tried <?php echo $src = wpse145194_get_adjacent_image_src(); ?> and <?php echo wpse145194_get_adjacent_image_src(); ?> both output "Array".
    – CK13
    May 22 '14 at 5:52
  • ah, sorry about that :) fixed my function!
    – Sisir
    May 22 '14 at 6:59
  • I guess it works now, but it's not what i wanted. I wanted to get the link from next_image_link function, which links to another attachment page containing the next image in the gallery. Your function links directly to the image.
    – CK13
    May 22 '14 at 7:14
0

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.