在导航菜单中动态列出所有自定义帖子类型的帖子

时间:2018-03-12 作者:mattbru

我使用以下方法成功地将所有帖子(自定义帖子类型)添加到我的wordpress菜单:https://codeseekah.com/2012/03/05/list-all-posts-in-wordpress-navigation-menu/

一切都很顺利。不幸的是,在wp admin中保存菜单时出现此错误:“The given object ID is not that of a menu item.“我得到了一个长列表,其中大约有20个(每个菜单项都有一个错误)。

这是我的函数文件中的内容:

/**
 * List all posts in wp nav menu
 * @link https://codeseekah.com/2012/03/05/list-all-posts-in-wordpress-navigation-menu/
 * @param  [type] $items [description]
 * @param  [type] $menu  [description]
 * @param  [type] $args  [description]
 * @return [type]        [description]
 */
/* take care of the urls */
add_filter( \'wp_get_nav_menu_items\', \'services_menu_filter\', 12, 3 );
function services_menu_filter( $items, $menu, $args ) {
    /* alter the URL for cpt-archive objects */

    $menu_order = count($items); /* Offset menu order */
    $child_items = array();

    foreach ( $items as &$item ) {
        if ( $item->title != \'##services##\' ) continue;
        $item->url = \'/services/\';
        $item->title = \'Services\';

        foreach ( get_posts( \'post_type=services&numberposts=-1\' ) as $post ) {
            $post->menu_item_parent = $item->ID;
            $post->post_type = \'nav_menu_item\';
            $post->object = \'custom\';
            $post->type = \'custom\';
            $post->menu_order = ++$menu_order;
            $post->title = $post->post_title;
            $post->url = get_permalink( $post->ID );
            /* add children */
            $child_items []= $post;
        }
    } 
    return array_merge( $items, $child_items );
}
有没有办法摆脱wordpress菜单错误通知?一切都很好,我可以接受,但我不想在客户看到所有错误时甩掉他们。是的,我想过用CSS隐藏错误,但这还不够好。

web主机是Kinsta。我尝试将以下内容添加到wp config。php:

/** Memory Limit */
define(\'WP_MEMORY_LIMIT\', \'128M\');
谢谢!

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

我想您只是在前端的导航菜单中添加自定义贴子,而不是在后端的wp admin中添加自定义贴子。

因此,您可以使用is_admin() 看看钩子wp_get_nav_menu_items 正在前端调用或从“管理”页面调用,如外观→菜单页面。

因此,请替换此:

function services_menu_filter( $items, $menu, $args ) {
    /* alter the URL for cpt-archive objects */
。。使用此选项:

function services_menu_filter( $items, $menu, $args ) {
    if ( is_admin() ) {
        return $items;
    }

    /* alter the URL for cpt-archive objects */
或者,替换此:

add_filter( \'wp_get_nav_menu_items\', \'services_menu_filter\', 12, 3 );
。。使用此选项:

if ( ! is_admin() ) {
    add_filter( \'wp_get_nav_menu_items\', \'services_menu_filter\', 12, 3 );
}

结束

相关推荐

Hard coded main navigation

Theme twentyeleven版本1.5请帮助我,我收到了@Mayeneul Islam的回复,但这并没有解决我的问题,如果我不能激活导航节目,那不是世界末日,但我真的想解决title 和name 使用我的代码发布以下问题我已经尽了最大的努力自己去寻找答案。PHP新手;o/由于我找不到与客户主站点相匹配的博客主导航样式,我删除了以下内容: <nav id=\"access\" role=\"navigation\"> <h3 class