Skip to content

Instantly share code, notes, and snippets.

@asadowski10 asadowski10/Frizzly Patch Secret
Last active Jun 26, 2017

Embed
What would you like to do?
<?php
/**
* Function copied from http://frankiejarrett.com/get-an-attachment-id-by-url-in-wordpress/
* Return an ID of an attachment by searching the database with the file URL.
*
* First checks to see if the $url is pointing to a file that exists in
* the wp-content directory. If so, then we search the database for a
* partial match consisting of the remaining path AFTER the wp-content
* directory. Finally, if a match is found the attachment ID will be
* returned.
*
* @return {int} $attachment
*/
private static function fjarrett_get_attachment_id_by_url( $url ) {
// Split the $url into two parts with the wp-content directory as the separator.
$parse_url = explode( parse_url( WP_CONTENT_URL, PHP_URL_PATH ), $url );
// Get the host of the current site and the host of the $url, ignoring www.
$this_host = str_ireplace( 'www.', '', parse_url( home_url(), PHP_URL_HOST ) );
$file_host = str_ireplace( 'www.', '', parse_url( $url, PHP_URL_HOST ) );
// Return nothing if there aren't any $url parts or if the current host and $url host do not match.
if ( ! isset( $parsed_url[1] ) || empty( $parsed_url[1] ) || ( $this_host != $file_host ) ) {
return;
}
// Now we're going to quickly search the DB for any attachment GUID with a partial path match.
// Example: /uploads/2013/05/test-image.jpg
global $wpdb;
$attachment = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type = 'attachment' AND guid LIKE %s", $parsed_url[1] ) );
if ( is_array( $attachment ) && ! empty( $attachment ) ) {
return array_shift( $attachment );
}
return null;
}
@asadowski10

This comment has been minimized.

Copy link
Owner Author

asadowski10 commented Jan 28, 2016

Improve performance on query. Check only post_type attachment ;)

@andreilupu

This comment has been minimized.

Copy link

andreilupu commented May 5, 2017

Why not use attachment_url_to_postid ? I'm not sure if you can rely on guid anymore.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.