我正在我的网站上创建一个自定义选项页面。其中一个选项是控制主页上的一个框,我试图通过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 \'> \'. $page->post_title .\'</option>\';
}
}
?>
</select>
最合适的回答,由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 ) );
}
?>