Как получить идентификатор поста с постоянной ссылки (довольно URL)? - PullRequest
35 голосов
/ 02 ноября 2010

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

Ответы [ 7 ]

50 голосов
/ 02 ноября 2010

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

9 голосов
/ 24 февраля 2012

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

8 голосов
/ 22 февраля 2011

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

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');
1 голос
/ 26 декабря 2013

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

0 голосов
/ 21 июня 2019

У меня есть мультисайтовый 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;
}
0 голосов
/ 11 июля 2014

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

  $postid = url_to_postid( $url );

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

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

0 голосов
/ 26 декабря 2013

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

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

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

...