使用WordPress导航菜单UI获取drag/drop 免费功能。
我想在这个网站上已经有了一些答案,比我解释的更好,但我似乎找不到适合你的答案。因此,让我尝试构建一个简单的示例:
进入外观/菜单,创建menu 例如mylist
菜单id。
然后我们将帖子拖放到该菜单上并保存。
向页面/帖子内容添加以下短代码:
[wpd_list menu_id="mylist"]
使用以下代码段进行支持:
/**
* Shortcode [wpd_list] to display posts ordered by the nav menu UI
*/
add_shortcode( \'wpd_list\', function( $atts = array(), $content = null )
{
$atts = shortcode_atts(
array( \'menu_id\' => \'\', ),
$atts,
\'shortcode_wpd_list\'
);
$items = wp_get_nav_menu_items( sanitize_key( $atts[\'menu_id\'] ) );
$ids = wp_list_pluck( $items, \'object_id\' ); // Don\'t use db_id or page_name!
$li = \'\';
$q = new WP_Query(
array(
\'post_type\' => \'any\',
\'post__in\' => (array) $ids,
\'orderby\' => \'post__in\', // Must have for the correct order!
)
);
while( $q->have_posts() )
{
$q->the_post();
$li .= sprintf(
\'<li><h2><a href="%s">%s</a></h2></li>\', // Modify this HTML to your needs!
get_permalink(),
get_the_title()
);
}
wp_reset_postdata();
return ! empty( $li ) ? sprintf( \'<ul>%s</ul>\', $li ) : \'\';
} );
PS:在编写这个示例时,我一开始至少犯了两个错误;-)
我第一次忘了在posts__in
顺序,以匹配导航菜单顺序。
其次,我使用db_id
作为post ID,而不是object_id
领域
修复后,它似乎按预期运行,所以我现在就在这里发布;-)