我目前正在通过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;
}
?>
要访问函数内部的全局变量,必须对其进行声明:
global $sites;
或使用GLOBALS数组直接访问它,例如:
$sites = $GLOBALS['sites'];