【问题标题】:How to get post id from permalink (pretty url)?如何从永久链接(漂亮的网址)获取帖子 ID?
【发布时间】:2011-05-03 18:27:14
【问题描述】:

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

【问题讨论】:

  • @Yuliy:这可能是最好的答案;我建议您将其作为实际答案,而不仅仅是评论。 :)
  • @Yuliy 我没找到,你能帮忙吗?
  • @Jeaffrey Gilbert - 你能解释更多你想要实现的目标吗?有几个“正确”的答案,但每个都是不同的,每个都取决于你的情况和你想要完成的事情。顺便说一句,您可能想在 SO 的姐妹网站 WordPress 上发布这个问题答案:wordpress.stackexchange.com.
  • @MikeSchinkel 我正在尝试通过 ajax 调用从自定义永久链接 (%category%/%postname%) 获取帖子 ID。为网站 +1。
  • @Jeaffrey Gilbert - 通过 AJAX 调用,您是指在 Javascript 中还是在 PHP 中?我仍然没有遵循您的上下文。您能否发布一些代码,显示您需要在哪里获取帖子 ID?

标签: wordpress permalinks


【解决方案1】:

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

【讨论】:

  • 好吧。至少现在记录在案。 codex.wordpress.org/Function_Reference/url_to_postid
  • 您还应该注意文档中提到的内容:“请注意,这不会返回自定义帖子类型的帖子 ID。”
  • 从 WordPress 3.7.0 开始,还支持自定义帖子类型。有关详细信息,请参阅上面的链接。
【解决方案2】:

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

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

检索给定路径的页面。

$page_path 在哪里

[...] 'pagename' 查询的等效项,如:'index.php?pagename=parent-page/sub-page'。

Function Reference/get page by path

例子:

// 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');

【讨论】:

  • 您只需要定义帖子类型(参见$post_type 参数:codex.wordpress.org/Post_Types
  • 你应该编辑它。你的答案是最好的,因为他们已经添加了对 custom_post_types 和帖子的支持,或者至少记录了它......这是我自己使用的解决方案。谢谢。
  • 太棒了。希望它也能帮助其他人。
【解决方案3】:

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

【讨论】:

  • 请在“this”一词下添加更多链接,以描述链接背后的内容。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    我有一个多站点 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;
    }
    

    【讨论】:

      【解决方案6】:

      你也可以试试这个:

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

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

      【讨论】:

        【解决方案7】:

        请使用

          $postid = url_to_postid( $url );
        

        检索附件的 ID。

        提供的url必须是example.com/?attachment_id=N的格式,不能和完整的url一起从完整的url中获取id。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-28
          • 2013-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多