列出所有页面,包括存档

时间:2013-12-07 作者:Mark

我正在我的网站上创建一个自定义选项页面。其中一个选项是控制主页上的一个框,我试图通过select 菜单

到目前为止,我可以列出所有页面,包括我的自定义帖子类型-我正在尝试的是将自定义帖子类型存档页面作为链接,并在列表中进行某种排序。

例如,选择层次结构应该如下所示:工作-(自定义帖子类型存档)火柴盒-(自定义帖子类型页面)页面-(常规页面)

我的当前代码:

$sitePages= get_posts(array(\'post_type\'=>array(\'page\', \'work\', \'people\'), \'posts_per_page\'=>-1, \'post_status\'=>\'publish\', \'depth\'=> 0));

$wp_cats = array();
foreach ($sitePages as $page_list ) {
       $wp_cats[$page_list->ID] = $page_list->post_title;
}
array_unshift($wp_cats, " ");
然后是foreach$wp_cats 回电话。

任何帮助都将不胜感激!

*****更新***基于Sven\'s answer ∨∨;

我使用以下代码输出所有内容。

<select name="<?php echo $value[\'id\']; ?>" id="<?php echo $value[\'id\']; ?>">
        <option value="">Choose A Page</option>
        <?php 
        $post_types = array( \'page\', \'work\', \'people\' );
        $wp_cats = array();
        foreach ( $post_types as $post_type ) {

        $pages = get_pages( array( \'post_type\'=>$post_type, \'posts_per_page\'=>-1, \'post_status\'=>\'publish\', \'depth\'=> 0 ) );

        $obj = get_post_type_object( $post_type );
        // output custom post type archive with link
        if ( $post_type !== \'page\' ){
        echo \'<option value="\' . get_post_type_archive_link( $post_type ) .\'"\';
        if (get_option( $value[\'id\'] ) == get_post_type_archive_link( $post_type )) { echo \'selected="selected"\'; }
        echo \'>\'. $obj->labels->singular_name . \'</option>\';
        }
        foreach ( $pages as $page ) {
       $wp_cats[$page->ID] = $page->post_title;
       // output posts with link
       echo \'<option value="\' . get_permalink($page->ID).\'" \';
       if (get_option( $value[\'id\'] ) == get_permalink($page->ID)) { echo \'selected="selected"\'; }
       echo \'>&nbsp;&nbsp;&nbsp;\'. $page->post_title .\'</option>\';
         }
       }
        ?>
</select>

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

是的,这绝对是可能的。获取您的帖子类型并将其插入$post_types 要循环浏览其中的每一个,手动生成归档和帖子:

<?php
// post types of your choice
$post_types = array( \'page\', \'work\', \'people\' );

$wp_cats = array();
foreach ( $post_types as $post_type ) {

    $pages = get_pages( array( \'post_type\'=>$post_type, \'posts_per_page\'=>-1, \'post_status\'=>\'publish\', \'depth\'=> 0 ) );

    $obj = get_post_type_object( $post_type );
    // output custom post type archive with link
    echo \'<a href="\' . get_post_type_archive_link( $post_type ) . \'">\' . $obj->labels->singular_name . \'</a><br />\';

    foreach ( $pages as $page ) {
       $wp_cats[$page->ID] = $page->post_title;
       // output posts with link
       echo \'<a href="\' . get_permalink($page->ID) . \'">\' . $page->post_title . \'</a><br />\';
    }
}
?>
注意:如您所见,这将输出普通链接;我认为您可以自己轻松地调整HTML标记,因为您没有在问题中要求特殊的内容。

还可以通过以下方式自动生成结构:wp_list_pages(), 但如果您需要自定义HTML标记,这有时会变得很棘手:

<?php
// post types of your choice
$post_types = array( \'page\', \'work\', \'people\' );

foreach ( $post_types as $post_type ) {
    // generate complete list links and titles
    wp_list_pages( array( \'post_type\'=>$post_type, \'title_li\'=>$post_type ) );
}
?>

结束

相关推荐

子主题函数.php如何与父主题函数.php一起工作?它像css一样吗?

我正在寻求帮助,了解儿童主题和家长主题functions.php 工作我知道使用CSS时,级联会覆盖样式表中前面声明的CSS。据我所知functions.php 操作方式不同。我理解这两个functions.php 已加载。如果您想让子主题中的函数覆盖父主题中的函数,并且父主题未使用codex建议的if语句,会发生什么情况?