如何从子弹中获取自定义帖子类型的帖子ID?


18

是否可以仅从子弹中获取自定义帖子类型的帖子ID?

据我所知,我们可以使用title从id中获取信息。但是在自定义帖子类型中可以有相同的标题,以便子弹是唯一的吗???

Answers:


40

您可以使用get_page_by_path()-不要让名字愚弄您,第三个参数是帖子类型:

if ( $post = get_page_by_path( 'the_slug', OBJECT, 'post_type' ) )
    $id = $post->ID;
else
    $id = 0;

7

如果您等了几天,然后升级到将于12月8日发布的Wordpress 4.4AFAIK),则可以使用新post_name__in参数,WP_Query该参数中包含一系列的标签

如果您需要完整的发布对象

$args = [
    'post_type'      => 'my_custom_post_type',
    'posts_per_page' => 1,
    'post_name__in'  => ['post-slug']
];
$q = get_posts( $args );
var_dump( $q );

如果您只需要ID

$args = [
    'post_type'      => 'my_custom_post_type',
    'posts_per_page' => 1,
    'post_name__in'  => ['post-slug'],
    'fields'         => 'ids' 
];
$q = get_posts( $args );
var_dump( $q );

不错,但要冒个头发个帖子可能有点费力?他们为什么要添加该功能!?
TheDeadMedic 2015年

1
@TheDeadMedic可能有点密集,是的,还没有真正测试过它的性能,只是作为替代方法添加了;-)。至于为什么,我真的不知道,看起来像WordPress如此著名的那些不必要的好东西之一。恕我直言,命名约定也是错误的,就像post_name属性和category_name参数一样,应该slug不应该如此name
Pieter Goosen

好的:)哇,实际上对我来说很不错:)
stlawrance 2015年

1
@TheDeadMedic我的方法与您的方法之间没有时间差。我不断地在0.002到0.005秒之间运行我们的每个查询。此外,这两种方法仅运行1个查询。;-)
Pieter Goosen 2015年

1
@TheDeadMedic 我只是说PHP要做的工作较少 -是的,可以肯定,完全同意。知道替代方法(尽管有时可能不是最好的方法)并拥有某种基准总是很高兴。享受;-)
Pieter Goosen 2015年

5

如果您只想要帖子ID,则可以在一行中完成操作。

url_to_postid( site_url('the_slug') );

1
这项url_to_postid功能非常灵活:您可以传入任何形式的永久链接/完整URL,并获取该URL的最准确的post-ID。但是,由于使用灵活,所以速度相当慢(尤其是端点/后类型很多)。如果你只在特定的帖子类型塞通,这是一个很大更快地使用get_page_by_path()
菲利普
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.