如何使用特定的POST_TYPE的“重写slug”来找到它?

时间:2018-01-10 作者:MrUzu

我一直在努力解决一个非常具体的问题。我注册了一些自定义的post类型,并为每种类型指定了重写slug。

\'rewrite\'           => array( \'slug\' => \'my-slug\' ),
但后来,当我试图使用“重写段塞”并查找请求的post\\u类型时,我无法使用get\\u post\\u type()函数:无法从重写段塞识别post\\u类型。

get_post_type( \'my-slug\' )
退货

bool(false)
有没有人有一个优雅的解决方案可以从其重写slug中找到post\\u类型?

2 个回复
SO网友:rudtek

我有两种方法可以做到这一点。。。每个问题:

这个只有在为CPT设置了重写段塞时才有效。如果未设置,可能会导致错误:

$post_type = get_queried_object();
echo $post_type->rewrite[\'slug\'];
此选项不适用于存档页面,因为页面类型将为“页面”:

$post_type = get_post_type();
if ( $post_type )
{
    $post_type_data = get_post_type_object( $post_type );
    $post_type_slug = $post_type_data->rewrite[\'slug\'];
    echo $post_type_slug;
}

SO网友:MrUzu

我终于有时间调查并找到了解决方案(这篇文章帮助我:Get list of all registered post types slugs).

据我所知,使用重写段塞获取Post类型的唯一方法是循环registerd Post类型,并将重写段塞与请求的重写段塞进行比较。

$types = get_post_types( [\'public\'   => true,\'_builtin\' => false], \'objects\' );
foreach ( $types as $type ) {
    if ( isset( $type->rewrite[\'slug\'] ) && \'my-rewrite-slug\' == $type->rewrite[\'slug\'] ) {
        $post_type_obj = $type;
        continue;
    }
}

结束