45

如何从永久链接(漂亮的网址)获取帖子 ID?

4

7 回答 7

59

您应该可以使用位于 rewrite.php 中的url_to_postid()[参见文档]。去年我在我的一个插件中使用了它,就像一个魅力。

于 2010-11-02T08:12:08.033 回答
11

我有一个专门的(和记录的)功能:

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');
于 2011-02-22T14:38:01.673 回答
8

适用于常规帖子类型和自定义帖子类型。url_to_postid()仅适用于常规帖子。

于 2012-02-23T23:11:04.540 回答
2

url_to_postid()as of 3.7.0:此功能现在支持自定义帖子类型(请参阅 Trac 票证#19744#25659)。

于 2013-12-26T17:14:16.430 回答
1

我有一个多站点 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;
}
于 2019-06-21T07:39:21.033 回答
0

你也可以试试这个:

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

cat 是您要寻找的那个=永久链接;动物是自定义帖子类型,

于 2013-12-26T17:33:56.387 回答
0

请用

  $postid = url_to_postid( $url );

检索附件的 ID。

要求提供的 url 格式为example.com/?attachment_id=N且不能与完整 URL 一起使用以从完整 URL 中获取 id。

于 2014-07-11T05:20:57.140 回答