在Wordpress的钩子内定义一个简码

问题描述 投票:0回答:1

我目前正在通过WordPress中的自定义钩子添加简码。我得到的数据很好,但是当我尝试调用简码时出现了问题。由于我没有传递带有短代码的值作为挂钩中的参数,因此代码失败,并给我错误Invalid argument passed to foreach。本质上,我想发生的事情是在该挂钩($sites)中使用全局数组,而不必在我的简码中使用参数(简码-> ['current-site'])。 $sites变量实际上是此处的页面,但是客户端将其称为站点。有人知道如何使用提供的代码来完成此工作吗?有更好的方法吗?

<?php
    add_action( 'sst_navigation', 'sst_hook_register_menus', 10, 1 );
    add_action( 'sst_navigation', 'sst_hook_active_navigation', 10, 1 );
    // add_action( 'sst_admin_navigation_hooks', 'sst_hook_set_authentication_links', 10, 3 );


    /* ========== Hooks ========== */
    function sst_hook_register_menus( $sites ) {
        register_nav_menus( $sites );
    }

    function sst_hook_active_navigation( $sites ) {
        $url = $_SERVER['REQUEST_URI'];
        $slug = explode( '/', trim( $url, '/' ) );
        $args = array();

        foreach( $sites as $key => $value ) {
            $key = str_replace( '_', '-', $key );

            if( $key === $slug[0] ) {
                $args = array(
                    'theme_location' => $key,
                    'container' => false,
                    'echo' => false,
                    'items_wrap' => '%3$s',
                );

            }
        }
        return strip_tags( wp_nav_menu( $args ), '<a>' );
    }

    function sst_hook_set_authentication_links( $items, $args ) {
        if( is_user_logged_in() ) {
            $items .= '<a href="/profile">Profile</a>';
            $items .= '<a class="button primary" href="' . wp_logout_url() . '">Logout</a>';
        } else {
            $items .= '<a class="button primary" href="' . wp_login_url() . '">Login</a>';
        }

        return $items;
    }
?>
wordpress wordpress-theming shortcode wordpress-hook
1个回答
0
投票

要访问函数内部的全局变量,必须对其进行声明:

global $sites;

或使用GLOBALS数组直接访问它,例如:

$sites = $GLOBALS['sites'];
© www.soinside.com 2019 - 2024. All rights reserved.