将菜单项设置为在特定时间内显示

时间:2017-04-03 作者:Shuler

我的网站顶部有一个“实用导航”,目前有两个链接——一个链接到我们的博客,另一个链接到每周新闻稿。我们还每天下午5点做一个广播节目,周六早上7点和晚上7点重播。在此期间,我希望出现第三个菜单项,其中包含指向播客的链接,以便现场收听。

有人知道如何在不安装插件的情况下做到这一点吗?我想我可以编辑该函数,但我不知道如何对计时器进行编程(

感谢您的帮助!

2 个回复
最合适的回答,由SO网友:WebElaine 整理而成

因为需要编辑主题文件,所以首先要确定是使用自定义主题还是从某处下载的主题。如果是从某处下载的,则需要创建child theme (基本上,您只需创建一个新的style.css 该文件只需要在顶部包含注释,这样WordPress就可以将其识别为您可以激活的主题,然后您可以复制您正在编辑的任何文件,可能header.php, 并在此处进行编辑)。这样,每当主主题更新时,子主题仍将应用您的更改。

然后,在标题中。php,您将更改代码,使其看起来像这样(可能更长,但将包含wp_nav_menu):

wp_nav_menu(array(\'theme_location\' => \'header\'));
有条件的:

$weekdayShowStart = \'17\';
$weekdayShowEnd = \'18\';
$satFirstShowStart = \'07\';
$satFirstShowEnd = \'08\';
$satSecondShowStart = \'19\';
$satSecondShowEnd = \'20\';
$dayAndTime = current_time("N G");
$timestamp = explode(\' \', $dayAndTime);
$day = $timestamp[0];
$hour = $timestamp[1];
if(
    ($day < 6 && $hour >= $weekdayShowStart && $hour < $weekdayShowEnd) ||
    ($day == 6 && $hour >= $satFirstShowStart && $hour < $satFirstShowEnd) ||
    ($day == 7 && $hour >= $satSecondShowStart && $hour < $satSecondShowEnd)
) {
    // paste your old code here, but change \'menu\' value to \'radio_show_live_menu\'
    wp_nav_menu(array(\'menu\' => \'radio_show_live_menu\'));
} else {
    // paste your old code here, with no changes
    wp_nav_menu(array(\'menu\' => \'header\'));
}
说明:

使用WordPresscurrent_time("N G") 给出N,这是一周中的一天,周一=1到周日=7,以及G,这是一天中的一小时,午夜=00到晚上11点=23。

如果您的节目超过一小时,则需要编辑上面的节目开始和结束值。

您需要确保WordPress设置为使用本地时区,以确保事情在您预期的时间发生。可以在“设置”>“常规”中执行此操作。

最后,这段新代码查找两个单独的菜单。如果您的节目已打开,它将从您需要创建的新菜单中拉出。如果您的节目没有播出,它将从旧/现有菜单中退出。

创建新菜单:在(子)主题中functions.php 文件,添加

函数radio\\u show\\u live\\u menu(){register\\u nav\\u menu(\'radio\\u show\\u live\\u menu\',\'radio live menu\');}add\\u action(\'init\',\'radio\\u show\\u live\\u menu\');

然后可以将现有菜单复制到新菜单中,并添加额外的链接。

SO网友:rudtek

演出有点晚了,但我把整个功能都放在了功能中。php。无需编辑标题。php:你需要确保自己也在正确的时区,而且IMHO Stringtotime更容易理解。

add_filter( \'wp_nav_menu_items\', \'my_nav_menu_profile_link\');
function my_nav_menu_profile_link($menu) {
    $livesite = \'#\';  //link to add to show
    $linkdescription = \'Live broadcast\';  //what the link will say on frontend
    $currdate = date(\'now\'); //may need to set your timezone if it is different than server time.

    //saturday morning show
    if ($currdate >= strtotime (\'Saturday 7am\') && $currdate <= strtotime (\'saturday 8am\') ) {
         $livelink = \'<li><a href="\'.$livesite.\'" >\'.$linkdescription.\'</a></li>\';
         $menu = $menu . $livelink;
      return $menu;

    //Saturday evening show
        } elseif ($currdate >= strtotime (\'Saturday 7pm\') && $currdate <= strtotime (\'saturday 8pm\')) {
         $livelink = \'<li><a href="\'.$livesite.\'" >\'.$linkdescription.\'</a></li>\';
         $menu = $menu . $livelink;
      return $menu;

    //evening shows everyday
    } elseif  ($currdate >= strtotime (\'5pm\') && $currdate <= strtotime (\'6pm\')) {
         $livelink = \'<li><a href="\'.$livesite.\'" >\'.$linkdescription.\'</a></li>\';
         $menu = $menu . $livelink;
      return $menu;

    //other times no live show         
    } else {
    return $menu;
    }
}

相关推荐

未执行Cronjob函数-负秒数

我创建了一个自定义函数,用于读取XML文件并将其导入woocommerce产品。XML文件每天由外部平台在网站ftp中导出。我将wordpress cronjob替换为真正的cronjob,cronjob实际上调用了函数,但函数从未执行过(参见屏幕截图)。我的职能:<?php /** * DynamiX Child Theme Functions * Load languages directory for translation */ fu