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

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

#1 楼

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

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


#2 楼

如果您等了几天,然后升级到将于12月8日发布的Wordpress 4.4(AFAIK),则可以在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年12月3日,12:36

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

–Pieter Goosen
2015年12月3日,12:48

好的:)哇,实际上对我来说很不错的更新:)

–守法
2015年12月3日15:32

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

–Pieter Goosen
2015年12月3日,17:10

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

–Pieter Goosen
2015年12月3日17:34

#3 楼

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

url_to_postid( site_url('the_slug') );


评论


url_to_postid是一个非常灵活的功能:您可以传入任何种类的永久链接/完整URL,并获取该URL的最准确的post-ID。但是,由于使用灵活,所以速度非常慢(尤其是端点/后类型很多)。如果您只为特定的帖子类型传递子弹,则使用get_page_by_path()的速度要快得多

– Philipp
18 Mar 2 '18在23:03