Как получить идентификатор сообщения из постоянной ссылки (красивый URL)?

Как получить идентификатор сообщения из постоянной ссылки (красивый URL)?


person Jeaf Gilbert    schedule 02.11.2010    source источник
comment
@Yuliy: Это, наверное, лучший ответ здесь; Я предлагаю вам сделать это реальным ответом, а не просто комментарием. :)   -  person bcat    schedule 02.11.2010
comment
@Yuliy не нашел, не могли бы вы помочь?   -  person Jeaf Gilbert    schedule 02.11.2010
comment
@Jeaffrey Gilbert - Можете ли вы подробнее объяснить, чего вы на самом деле пытаетесь достичь? Есть несколько правильных ответов, но все они разные, и каждый из них будет зависеть от вашей ситуации и того, чего вы пытаетесь достичь. Кстати, вы можете опубликовать этот вопрос на родственном сайте SO WordPress. Ответы: wordpress.stackexchange.com.   -  person MikeSchinkel    schedule 02.11.2010
comment
@MikeSchinkel Я пытаюсь получить идентификатор сообщения из пользовательской постоянной ссылки (%category%/%postname%) с помощью вызова ajax. +1 за сайт.   -  person Jeaf Gilbert    schedule 02.11.2010
comment
@Jeaffrey Gilbert - Под вызовом AJAX вы имеете в виду Javascript или PHP? Я все еще не понимаю вашего контекста. Можете ли вы опубликовать свой код, показывающий, где вам нужно получить идентификатор сообщения?   -  person MikeSchinkel    schedule 03.11.2010


Ответы (7)


Вы должны быть в порядке с url_to_postid()[см. документацию], которая находится в rewrite.php. Я использовал его в моем плагине в прошлом году, работает как шарм.

person kovshenin    schedule 02.11.2010
comment
Хорошо. По крайней мере, сейчас это задокументировано. codex.wordpress.org/Function_Reference/url_to_postid - person vmassuchetto; 11.04.2012
comment
Вы также должны обратить внимание на упоминания в документации: обратите внимание, что это не возвращает идентификатор сообщения для пользовательских типов сообщений. - person Mazatec; 11.11.2012
comment
Начиная с WordPress 3.7.0 также поддерживаются пользовательские типы записей. Подробности смотрите по ссылке выше. - person Simo A.; 29.12.2013

У меня есть специальная (и задокументированная) функция для этого:

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');
person mems    schedule 22.02.2011
comment
Вам просто нужно определить тип сообщения (см. аргумент $post_type: codex.wordpress.org/Post_Types) - person mems; 28.03.2013
comment
Вы должны отредактировать это. Ваш ответ является лучшим сейчас, когда они добавили поддержку custom_post_types и сообщений или, по крайней мере, задокументировали это ... Это решение, которое я использую сам. Спасибо. - person Jake; 29.03.2013
comment
Потрясающий. надеюсь, это поможет и другим. - person Jake; 31.03.2013

Это работает как для обычных, так и для пользовательских типов сообщений. url_to_postid() работает только для обычных сообщений.

person deweydb    schedule 23.02.2012
comment
пожалуйста, добавьте больше, чем ссылку под словом this, чтобы описать, что стоит за ссылкой. - person jnhghy - Alexandru Jantea; 11.07.2015

url_to_postid() от 3.7.0: эта функция теперь поддерживает пользовательские типы сообщений (см. билеты Trac #19744, #25659).

person jovaniwayne    schedule 26.12.2013

У меня многосайтовый 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;
}
person khandaniel    schedule 21.06.2019

вы также можете попробовать это:

$post = get_page_by_path('cat',OBJECT,'animal'); 

cat — это тот, кого вы ищете = постоянная ссылка; животное - это пользовательский тип записи,

person jovaniwayne    schedule 26.12.2013

пожалуйста, используйте

  $postid = url_to_postid( $url );

чтобы получить идентификатор вложения.

Необходимо, чтобы предоставленный URL-адрес был в формате example.com/?attachment_id=N и не работал с полным URL-адресом для получения идентификатора из полного URL-адреса.

person Cybernob Technologies    schedule 11.07.2014