web-dev-qa-db-ja.com

登録されているすべての投稿タイプの一覧を取得する

登録したすべての投稿タイプのリスト(配列)を取得したいのですが。

正確に私は彼らのナメクジを回収したいと思います。

誰かが私を手伝ってくれる?ありがとうございます。

3
unfulvio

@ EAMannの答えは正しいですが、登録されているすべての投稿タイプを取得するためのWordPress関数のビルドが既にあります。get_post_types

<?php
// hook into init late, so everything is registered
// you can also use get_post_types where ever.  Any time after init is usually fine.
add_action( 'init', 'wpse34410_init', 0, 99 );
function wpse34410_init() 
{
    $types = get_post_types( [], 'objects' );
    foreach ( $types as $type ) {
        if ( isset( $type->rewrite->slug ) ) {
            // you'll probably want to do something else.
            echo $type->rewrite->slug;
        }
    }
}
6
chrisguitarguy

register_post_type()を呼び出すと、新しい投稿の種類が$wp_post_typesというグローバル変数に追加されます。だからあなたはそれからあなたのすべての投稿タイプのリストを得ることができます:

function get_registered_post_types() {
    global $wp_post_types;

    return array_keys( $wp_post_types );
}

$wp_post_types変数はCPT定義を含む配列で、各CPT引数セット(ラベル、機能など)はCPTのスラッグにマップされています。 array_keys()を呼び出すことであなたのCPTのナメクジの配列をあなたに与えるでしょう。

1
EAMann

最も簡単な方法は、WordPress function get_post_types();を使用して次のとおりです。

<?php
$get_cpt_args = array(
    'public'   => true,
    '_builtin' => false
);
$post_types = get_post_types( $get_cpt_args, 'object' ); // use 'names' if you want to get only name of the post type.

// see the registered post types
echo '<pre>';
print_r($post_types);
echo '</pre>';

// do something with array
if ( $post_types ) {
    foreach ( $post_types as $cpt_key => $cpt_val ) {
       // do something.
    }
}
?>
0
Aamer Shahzad