WP_insert_post还添加了一个菜单项

时间:2017-10-08 19:51:07

标签: php mysql wordpress

我已经获得了以下代码,可以激活我的wordpress插件。

它确实创建了页面,但它还添加了一个我不想拥有的导航菜单项。

有人可以帮助我,因为我无法看到我出错的地方。

我知道它也添加了一个导航菜单项,因为查看表wp_posts中的数据库,post_date与post_type页面和nav_menu_item完全相同。

public static function activate() {
    global $myplugin;
    require_once plugin_dir_path( __FILE__ ) . 'install-sql.php';

    //Add a front end page
    $author_id = 9;
    $slug = 'myplugin';
    $title = "My Plugin";
    $content = '[myplugin_render]';
    $page = array(
        'post_author'           => 1,
        'post_content'          => $content,
        'post_title'            => $title,
        'post_status'           => 'publish',
        'post_type'             => 'page',
        'comment_status'        => 'closed',
        'ping_status'           => 'closed',
        'guid'                  => '',
        'import_id'             => 0,
        'context'               => ''
    );
    if( null == get_page_by_title( $title ) ) {
        wp_insert_post( $page );
    } else {
        $page = get_page_by_title( $title );
        if ( is_page($page->ID) ) {
            $post = array(
                'ID'            => $page->ID,
                'post_content'  => $content
                );
            wp_update_post( $post );
        }
    }



}

2 个答案:

答案 0 :(得分:1)

疯狂的猜测:转到外观=>菜单,选择您的菜单,在设置下,是否选中“自动将新的顶级页面添加到此菜单”旁边的复选框?

如果是:取消选中它:)

答案 1 :(得分:0)

对于那些来这里以编程方式回避设置Automatically add new top-level pages to this menu的人-我的解决方案是正常添加页面,然后再调用以下函数。

Example:

$pageID = wp_insert_post($args);
zeroBSCRM_wp_removePageFromMenus($pageID);

这是我从所有前端菜单中删除页面的功能(使用页面ID):

/**
 * Removes a page from front-end menus by ID
 *
 * @param int id        WordPress Page ID
 *
 * @return int count of removed
 */
function zeroBSCRM_wp_removePageFromMenus($pageID=-1){

    // only if a valid $pageID
    if ($pageID > 0){

        // get menu locations
        $locations = get_nav_menu_locations();

        // cycle through (any) and get menu in slot
        if (is_array($locations)) foreach ($locations as $location => $menuID){

            // Retrieve Menu & Pages in menu
            $menu = wp_get_nav_menu_object($menuID);            
            $pagesItem = wp_get_nav_menu_items($menu, array("object"=>"page"));

            // Cycle through pages & remove target menu page link if present
            if (is_array($pagesItem)) 
              foreach ($pagesItem as $page)
                if ($page->object_id == $pageID) wp_delete_post($page->db_id);

        }

    }

    return 0;

}