PHP OOP 从另一个具有 PSR4 自动加载器的类中选择方法



我正在尝试在引导的 walker 类中选择一种称为回退的方法。类名称为WPNavwalker。

我尝试了很多东西,但没有用。如 \命名空间\类\类名::回退, 命名空间\类\类名::回退

查看我的代码:

use NamespaceclassesWPNavwalker;
public static function show_menu() 
{
    wp_nav_menu( array(
        'theme_location'  => 'primary',
        'depth'           => 2, // 1 = no dropdowns, 2 = with dropdowns.
        'container'       => 'div',
        'container_class' => 'collapse navbar-collapse',
        'container_id'    => 'bs-example-navbar-collapse-1',
        'menu_class'      => 'navbar-nav ml-auto',
        'fallback_cb'     => 'Classname::fallback',
        'walker'          => new NamespaceclassesWPNavwalker()   
    ));
}

我只需要知道如何选择该方法

这是错误:未

捕获错误:未定义的类常量"回退"。

public static function fallback( $args ) {
            if ( current_user_can( 'edit_theme_options' ) ) {
                /* Get Arguments. */
                $container       = $args['container'];
                $container_id    = $args['container_id'];
                $container_class = $args['container_class'];
                $menu_class      = $args['menu_class'];
                $menu_id         = $args['menu_id'];
                // initialize var to store fallback html.
                $fallback_output = '';
                if ( $container ) {
                    $fallback_output .= '<' . esc_attr( $container );
                    if ( $container_id ) {
                        $fallback_output .= ' id="' . esc_attr( $container_id ) . '"';
                    }
                    if ( $container_class ) {
                        $fallback_output .= ' class="' . esc_attr( $container_class ) . '"';
                    }
                    $fallback_output .= '>';
                }
                $fallback_output .= '<ul';
                if ( $menu_id ) {
                    $fallback_output .= ' id="' . esc_attr( $menu_id ) . '"'; }
                if ( $menu_class ) {
                    $fallback_output .= ' class="' . esc_attr( $menu_class ) . '"'; }
                $fallback_output .= '>';
                $fallback_output .= '<li><a href="' . esc_url( admin_url( 'nav-menus.php' ) ) . '" title="' . esc_attr__( 'Add a menu', 'wp-bootstrap-navwalker' ) . '">' . esc_html__( 'Add a menu', 'wp-bootstrap-navwalker' ) . '</a></li>';
                $fallback_output .= '</ul>';
                if ( $container ) {
                    $fallback_output .= '</' . esc_attr( $container ) . '>';
                }
                // if $args has 'echo' key and it's true echo, otherwise return.
                if ( array_key_exists( 'echo', $args ) && $args['echo'] ) {
                    echo $fallback_output; // WPCS: XSS OK.
                } else {
                    return $fallback_output;
                }
            }
        }

文档链接:https://github.com/wp-bootstrap/wp-bootstrap-navwalker

这有效并模仿您的代码:

<?php
// this is the class defining a callback
class MyClass
{
    public static function ThisIsCallback($args)
    {
        var_dump([
            'I am your callback',
            $args
        ]);
    }
}
// this is a class /w method calling the callback
class AnotherClass
{
    public function whatever($params, $callback)
    {
        var_dump([
            'I am whatever'
        ]);
        $callback($params);
    }
}
// this is the actual call
(new AnotherClass)->whatever([1,2,'I am your param'],[MyClass, ThisIsCallback]);

输出:

array(1) {
  [0]=>
  string(13) "I am whatever"
}
array(2) {
  [0]=>
  string(18) "I am your callback"
  [1]=>
  array(3) {
    [0]=>
    int(1)
    [1]=>
    int(2)
    [2]=>
    string(15) "I am your param"
  }
}

最新更新