Как да получа идентификатор на публикация от постоянна връзка (красив 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 Answers: wordpress.stackexchange.com.   -  person MikeSchinkel    schedule 02.11.2010
comment
@MikeSchinkel Опитвам се да получа ID на публикация от персонализирана постоянна връзка (%category%/%postname%) чрез ajax повикване. +1 за сайта.   -  person Jeaf Gilbert    schedule 02.11.2010
comment
@Jeaffrey Gilbert - Под AJAX повикване имате предвид в Javascript или в PHP? Все още не следя контекста ви. Можете ли да публикувате част от вашия код, показващ къде трябва да получите ID на публикацията?   -  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?име на страница=родителска-страница/подстраница“.

Вижте Справочник за функции/получаване на страница по път

Пример:

// 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
моля, добавете повече от връзка под думата това, за да опишете какво стои зад връзката. - 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'); 

котката е тази, която търсите= постоянната връзка; животното е потребителският тип публикация,

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