调用以列出所有自定义发布类型?

时间:2014-02-02 作者:user46040

“我的主题”当前使用此代码将所有类别调用到列表中,以从缩略图小部件(在后端)中获取帖子。

$mx_categories_obj = get_categories(\'hide_empty=0\');
$mx_categories = array();
foreach ($mx_categories_obj as $mx_cat) {
$mx_categories[$mx_cat->cat_ID] = $mx_cat->slug;
}
$categories_tmp = array_unshift($mx_categories, "Select a category:");
我如何安排它,使其列出所有自定义帖子类型?我尝试使用此功能,但没有成功:

$cpt_post_types_obj = get_post_types(\'hide_empty=0\');
$cpt_post_types = array();
foreach ($cpt_post_types_obj as $cpt_apt) {
$cpt_post_types[$cpt_apt->apt_ID] = $cpt_apt->slug;
}
$post_types_tmp = array_unshift($cpt_post_types, "Select a category:");

1 个回复
最合适的回答,由SO网友:Nicolai Grossherr 整理而成

您必须查看文档以了解如何使用函数,不能只是替换它们。如果你这样做,你会看到get_post_types() 必须使用不同的get_categories(). 例如,您不能使用参数hide_empty. 除此之外,你必须改变$output 参数到objects, 默认值为names. 如果您使用$args$operator 参数下面是一个未经测试的基本示例,该示例基于您迄今为止的尝试。

Code:

$args = array(
    //  public - Boolean. If true, only public post types will be returned. 
    \'public\' => true,
    // _builtin - Boolean. 
    // If true, will return WordPress default post types.
    // Use false to return only custom post types. 
    \'_builtin\' => false
);
$output = \'objects\';
$operator = \'and\';
$cpt_post_types_obj = get_post_types( $args, $output, $operator );
$cpt_post_types = array();
foreach ( $cpt_post_types_obj as $cpt_apt ) {
    $cpt_post_types[] = $cpt_apt->name;
}
$post_types_tmp = array_unshift($cpt_post_types, "Select a post type:");
<小时>

Update:

由于自定义post类型数组的构造与上述代码配合使用,因此问题可能与下拉列表有关。下面是一个你如何做到这一点的例子。

Code:

echo \'<select name="post_type_dropdown">\';
    foreach ( $cpt_post_types_obj as $cpt_apt ) {
        echo \'<option value="\'. $cpt_apt->name .\'">\'. $cpt_apt->name . \'</option>\';
    }
echo \'</select>\';
<小时>

2nd Update:

就像我说的,这对我很有用。使用下面的代码,只需将其放入functions.php 要测试,请调试它。

Code:

add_action( \'init\', \'wpse132165_pt_list_debug\' );
function wpse132165_pt_list_debug() {
    $args = array(
        //  public - Boolean. If true, only public post types will be returned. 
        \'public\' => true,
        // _builtin - Boolean. 
        // If true, will return WordPress default post types.
        // Use false to return only custom post types. 
        \'_builtin\' => false
    );
    $output = \'objects\';
    $operator = \'and\';
    $cpt_post_types_obj = get_post_types( $args, $output, $operator );
    // open up the next line like this /** to comment the code until the next /**/
    /**/
    echo \'<pre>\';
    print_r($cpt_post_types_obj);
    echo \'</pre>\';
    /**/
    $cpt_post_types = array();
    foreach ($cpt_post_types_obj as $cpt_apt) {
        $cpt_post_types[] = $cpt_apt->name;
    }
    /**/
    echo \'<pre>\';
    print_r($cpt_post_types);
    echo \'</pre>\';
    /**/
    echo \'<select name="post_type_dropdown">\';
        foreach ( $cpt_post_types_obj as $cpt_apt ) {
            echo \'<option value="\'. $cpt_apt->name .\'">\'. $cpt_apt->labels->name . \'</option>\';
        }
    echo \'</select>\';
}

结束

相关推荐