Подтвердить что ты не робот

Как получить сообщение id из permalink (довольно url)?

Как получить сообщение id из permalink (довольно URL)?

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

get_page_by_path( $page_path, $output, $post_type );

Получает страницу с указанием ее пути.

Где $page_path есть

[...] эквивалент запроса "pagename", как в: "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');

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

используйте

  $postid = url_to_postid( $url );

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

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

Ответ 7

У меня есть многосайтовый WP, поэтому, как только я по каким-то причинам url_to_postid() блоги в некоторых блогах, url_to_postid() работает, в других блогах на пост того же типа не работает, а get_page_by_path() работает как 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;
}