wordpress - 在 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;
}
?>
解决方案
要访问函数内的全局变量,您必须声明它:
global $sites;
或者使用 GLOBALS 数组直接访问它,例如:
$sites = $GLOBALS['sites'];
推荐阅读
- javascript - 当我单击 div 时如何隐藏/显示兄弟姐妹 div
- word - Word Mailing:如果合并字段段落编号,则交叉引用
- php - 递归函数返回问题
- javascript - mysql 表 AUTO 增量不断递增,而不是 1。像 41、51、61
- r - 修剪列中的空格
- laravel - Laravel - 如何在 chartjs 饼图中同时显示计数和百分比 (%)
- powershell - 将复制命令行从批处理转换为 powershell
- c# - C# 和 LINQ.XML 从 XML 中选择
- javascript - 键入自定义渲染器 [ Gatsby 和内容丰富的 Richtext ]
- java - Spring Boot 和 GraalVM 原生镜像