Как получить идентификатор сообщения из постоянной ссылки (красивый URL)?
Как получить идентификатор сообщения из постоянной ссылки (красивый URL)?
Ответы (7)
Вы должны быть в порядке с url_to_postid()
[см. документацию], которая находится в rewrite.php. Я использовал его в моем плагине в прошлом году, работает как шарм.
У меня есть специальная (и задокументированная) функция для этого:
get_page_by_path( $page_path, $output, $post_type );
Извлекает страницу по заданному пути.
Где $page_path
[...] эквивалент запроса «имя страницы», например: «index.php?pagename=parent-page/sub-page».
См. Справочник по функциям/получение страницы по пути.
Пример:
// Assume 'my_permalink' is a post.
// But all types are supported: post, page, attachment, custom post type, etc.
// See http://codex.wordpress.org/Post_Types
get_page_by_path('my_permalink', OBJECT, 'post');
$post_type
: codex.wordpress.org/Post_Types)
- person mems; 28.03.2013
Это работает как для обычных, так и для пользовательских типов сообщений. url_to_postid() работает только для обычных сообщений.
url_to_postid()
от 3.7.0
: эта функция теперь поддерживает пользовательские типы сообщений (см. билеты Trac #19744
, #25659
).
У меня многосайтовый WP, поэтому, когда я просматриваю блоги, по каким-то причинам в некоторых блогах url_to_postid()
работает, в других блогах на постах того же типа нет, а get_page_by_path()
работает как шарм. Поэтому я сделал это таким образом, который, возможно, не идеален:
$parsed_url = wp_parse_url( $url ); // Parse URL
$slug = substr($parsed_url['path'], 1 ); // Trim slash in the beginning
$post_id = url_to_postid( $slug ); // Attempt to get post ID
if ( ! $post_id ) { // If it didn't work try to get it manually from DB
$post_query_result =
$wpdb->get_row("SELECT ID FROM {$wpdb->prefix}posts WHERE post_name = '{$slug}'");
$analog_id = (int) $post_query_result->ID;
}
вы также можете попробовать это:
$post = get_page_by_path('cat',OBJECT,'animal');
cat — это тот, кого вы ищете = постоянная ссылка; животное - это пользовательский тип записи,
пожалуйста, используйте
$postid = url_to_postid( $url );
чтобы получить идентификатор вложения.
Необходимо, чтобы предоставленный URL-адрес был в формате example.com/?attachment_id=N
и не работал с полным URL-адресом для получения идентификатора из полного URL-адреса.