首页 > 解决方案 > 在 Wordpress 中的挂钩内定义简码

问题描述

我目前正在努力通过 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;
    }
?>

标签: wordpresswordpress-themingshortcodewordpress-hook

解决方案


要访问函数内的全局变量,您必须声明它:

global $sites;

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

$sites = $GLOBALS['sites'];

推荐阅读