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.

2 Answers 2

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, 2014 at 5:40
  • You have to echo it like echo wpse145194_get_adjacent_image_src();
    – Sisir
    May 22, 2014 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, 2014 at 5:52
  • ah, sorry about that :) fixed my function!
    – Sisir
    May 22, 2014 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, 2014 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 and acknowledge that you have read and understand our privacy policy and code of conduct.

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