是否使用快捷码将带有自定义步行器的菜单插入页面/帖子正文?

时间:2019-06-29 作者:rambillo

我试图在页面或帖子正文中添加一个使用自定义walker类的菜单,并决定使用短代码。我不必使用短代码,但我必须将菜单嵌入页面/帖子内容的中心部分,并且菜单必须使用自定义walker。

而像这样的问题:https://wordpress.stackexchange.com/a/293006/67420 有一种工作方法可以在页面内容中嵌入菜单,尝试扩展该菜单以传递自定义walker会失败,并出现以下警告:

警告:call\\u user\\u func\\u array()要求参数1是有效回调,在/…中找不到类“new wp\\u bootstrap\\u navwalker()”/站点/wp包括/导航菜单模板。php在线580

此菜单使用相同的自定义walker类,在标题中定期调用时运行良好。在这种情况下,我必须将主菜单插入到某个页面内容的中心部分(因此它不会在该页面的标题中调用)。此外,我还尝试按照下面的建议显式包含该类@Antti Koskinen.

以下是我的短代码:

[menu container="div" container_id="main-nav" container_class="collapse navbar-collapse justify-content-center" menu_id="false" menu_class="navbar-nav" depth="3" fallback_cb="wp_bootstrap_navwalker::fallback" walker="new wp_bootstrap_navwalker()"]
下面是我的自定义快捷码函数:

add_shortcode( \'menu\', \'se_menu_shortcode\' );

function se_menu_shortcode( $atts, $content = null ) {

    extract( shortcode_atts( array(  
        \'container\' => null,
        \'container_id\' => null,
        \'container_class\' => null,
        \'menu_id\' => null,
        \'menu_class\' => null,
        \'depth\' => null,
        \'fallback_cb\' => null,
        \'walker\' => null 
    ), $atts ) );

    return wp_nav_menu( array(  
        \'container\' => $container,
        \'container_id\' => $container_id,
        \'container_class\' => $container_class,
        \'menu_id\' => $menu_id,
        \'menu_class\' => $menu_class,
        \'depth\' => $depth,
        \'fallback_cb\' => $fallback_cb,
        \'walker\' => $walker,
        \'echo\' => false 
    ) );
}
感谢您的帮助!

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

Update 30.6.2019

啊,现在我想我明白了代码和警告是怎么回事了。我认为它实际上是在试图找到一个名为“new wp\\u bootstrap\\u navwalker()”的类。

在我的本地沙盒WP中,我在更改后使用了短代码\'walker\' => $walker,\'walker\' => new $walker,. 我还将walker参数从walker="new wp_bootstrap_navwalker()"walker="wp_bootstrap_navwalker"

EDIT

\'walker\' => new $walker, 应该是这样的\'walker\' => $walker ? new $walker : \'\', 为避免错误,如果$walkernull.

如果您收到“找不到类”警告,那么在您尝试实例化类时,可能还没有包括/加载类文件。因此,如果需要,您可以尝试在shortcode函数中要求/包含类文件。沿着这些路线,

function se_menu_shortcode( $atts, $content = null ) {

  // extract

  if ( ! class_exists(\'wp_bootstrap_navwalker\') ) {
    require_once \'path/to/class/definition/file.php\';
  }

  // return
}
或者您可以尝试编写一个自动加载器来自动处理类的请求/包含,https://www.php.net/manual/en/function.spl-autoload-register.php

相关推荐

如何将数据从自定义字段复制到POST_CONTENT?

我用过ACF 在自定义字段中存储post数据。我想从wysiwyg field 将\\u内容发布到wp\\u posts表中。我该怎么做?大致情况:data is on wp_postmeta table, where meta_key = \'description\' and post_id is = $post->ID and needs to be copied over to \'post_content\' of wp_posts table where id is = $pos