Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I'm curious if it is possible, in a plugin/custom code, to take an URL that has been generated by the currently running WordPress site & parse it to retrieve the $blog_id and $post_id?

ie. taking a string like "myblog.mysite.com/2012/03/16/whatever/" and determining that this is post #6 ("whatever") on blog #2 ("myblog").

I realize that I can probably strip the URL and parse the domain myself, but I hope that there might be recommended WordPress methods exposed to make this more robust across URL formats.

share|improve this question
add comment

3 Answers

up vote 3 down vote accepted

As Weston mentioned, if you're within WordPress and you know what blog the URL came from, then ask WordPress for the blog ID.

But if you're really, really sure there's no better method in this case than parsing a URL, then here you go:

$url = 'http://myblog.mysite.com/2012/03/16/whatever/';

$domain = parse_url( $url, PHP_URL_HOST );

// This could be dynamic but good enough for now
$subdomain = str_replace( '.mysite.com', '', $domain );

// Never use $blog_id for anything, you'll break tons of things
$parsed_blog_id = get_id_from_blogname( $subdomain );


// url_to_postid() only works for the current blog
switch_to_blog( $parsed_blog_id );

$post_id = url_to_postid( $url );

restore_current_blog();

Reference material:

http://codex.wordpress.org/Function_Reference/get_id_from_blogname

http://codex.wordpress.org/Function_Reference/url_to_postid

share|improve this answer
    
Thanks Viper! That's exactly what I was looking for (I need to reverse a pasted URL, not parse the current one) Although str_replace() works to get blogname, and explode('.', $domain)[0] would work too, I am wondering if there is a way to handle the case where SUNRISE is enabled (multi-domain mapping.) The wp_blogs table is actually stored with full URL so it'd be even simpler than get_id_from_blogname! Thanks BTW for your work on WordPress! –  Steve Eisner Mar 18 '12 at 5:28
    
I forgot to mention that you need to call switch_to_blog() before calling url_to_postid() as the function doesn't parse the domain only the path. I've updated my code. And no problem! :) –  Viper007Bond Mar 19 '12 at 21:11
add comment

Plain and simple, to get the post id you just use:

<?php 
echo get_the_ID(); 
?>

That will echo out the post id.

And:

<?php 
echo get_current_blog_id(); 
?>

Will echo out the blog id.

http://codex.wordpress.org/Function_Reference/get_the_ID

and

http://codex.wordpress.org/Function_Reference/get_current_blog_id respectively

share|improve this answer
1  
Thanks for the answer Weston, but I need to parse an URL in a string, not get info from the current URL. Appreciate the help anyway. –  Steve Eisner Mar 18 '12 at 5:32
add comment

The best solution I've found for this is the Monkeyman Rewrite Analyzer plugin. It was written by a member of the WPSE community in response to a few similar requests some time ago.

You can give it any URL for your site, and it will tell you explicitly how that request will be mapped/interpreted by WordPress.

For example: Rewrite analyzer screenshot

share|improve this answer
    
Thanks, I'll see if I can figure out how it works internally (since I need to get the results in code, rather than via a UI) It might be a more thorough answer since it handles all forms of URLs and not just post slugs... –  Steve Eisner Mar 20 '12 at 21:14
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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