使用函数将页面自动添加到主菜单。php

时间:2014-03-24 作者:Sam

是否可以通过功能将新页面自动添加到主菜单中。php?

此特定主题将部署在一个特殊版本的multisite上,因此通过admin提供的复选框不是一个选项。

我似乎在抄本或这里找不到任何东西。

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

没有具体的答案,但评论时间太长。您还可以尝试查看WordPress core本身使用的代码。我知道你说过你不能使用自动添加页面的复选框,但你可以看看它是如何使用的。在WordPress代码中进行一点挖掘(使用一个像样的文本编辑器,您应该能够在整个WordPress代码库中搜索短语),就会发现:

/**
 * Automatically add newly published page objects to menus with that as an option.
 *
 * @since 3.0.0
 * @access private
 *
 * @param string $new_status The new status of the post object.
 * @param string $old_status The old status of the post object.
 * @param object $post The post object being transitioned from one status to another.
 * @return void
 */
function _wp_auto_add_pages_to_menu( $new_status, $old_status, $post ) {
    if ( \'publish\' != $new_status || \'publish\' == $old_status || \'page\' != $post->post_type )
        return;
    if ( ! empty( $post->post_parent ) )
        return;
    $auto_add = get_option( \'nav_menu_options\' );
    if ( empty( $auto_add ) || ! is_array( $auto_add ) || ! isset( $auto_add[\'auto_add\'] ) )
        return;
    $auto_add = $auto_add[\'auto_add\'];
    if ( empty( $auto_add ) || ! is_array( $auto_add ) )
        return;

    $args = array(
        \'menu-item-object-id\' => $post->ID,
        \'menu-item-object\' => $post->post_type,
        \'menu-item-type\' => \'post_type\',
        \'menu-item-status\' => \'publish\',
    );

    foreach ( $auto_add as $menu_id ) {
        $items = wp_get_nav_menu_items( $menu_id, array( \'post_status\' => \'publish,draft\' ) );
        if ( ! is_array( $items ) )
            continue;
        foreach ( $items as $item ) {
            if ( $post->ID == $item->object_id )
                continue 2;
        }
        wp_update_nav_menu_item( $menu_id, 0, $args );
    }
}
此代码运行于:

add_action( \'transition_post_status\',     \'_wp_auto_add_pages_to_menu\', 10, 3 );
也许这将为您指明正确的方向,也许您可以复制WP正在做的事情来做类似的事情。

结束

相关推荐

Load Pages Menu in single.php

我搜索了很多,但没有找到答案。。。我的Wordpress有4个主要区域,每个区域还有一个新闻(帖子)部分和一个子菜单。如果我加载一篇文章(使用single.php),是否可以将相应的子菜单加载到该区域?我正在考虑对段塞进行分串,以获得正确的区域。非常感谢您的帮助。Thx,奥利弗其他信息:有一个侧边栏,我也会在单曲中显示。php侧边栏应包含一个区域的菜单树,贴子未连接到菜单