如何按类别更改徽标

时间:2018-01-10 作者:Jthunter24

我有一个多层次的Wordpress网站,需要有一个不同的标志,这取决于目前的类别。例如:主页将有徽标。png但是冒险类以及所有冒险的子类都会有冒险标志。png。

我试过:

<?php if (is_category(10) || cat_is_ancestor_of(10, get_query_var(\'cat\'))): ?>
<script>
    document.getElementsByClassName(\'logo\')[0].src =\'adventurelogo.png\';
</script>

<?php endif; ?>

但这似乎并不奏效。有人知道怎么做吗?

谢谢你的帮助!

1 个回复
SO网友:David Sword

根据这些评论,我想我可以带你看一下。

如果您想将这样的代码“注入”到主题中,更好的方法之一是Wordpress Action API.

由于您试图在站点上获取的是Javascript,因此我们将挂钩到页脚。假设主题构建正确,将其添加到函数中。php将在所有页面的网站底部添加一些代码:

add_action(\'wp_footer\', function(){
    echo "<mark> Hello</mark>";
});
如果我们随后添加您的条件,我们可以使该消息仅显示在您的类别页面上。查看Hello消息是否位于您想要的页面上,而不应位于您不想要的页面上。

add_action(\'wp_footer\', function(){
    if (is_category(10) || cat_is_ancestor_of(10, get_query_var(\'cat\')))
        echo "<mark> Hello</mark>";
});
如果那不起作用,is_category() 只是反对$wp_query. 所以我们可以回顾$wp_query 对于您所关注的页面,确保您对正确的内容进行了条件化。访问徽标应该更改的页面,查看cat 值为:

add_action(\'wp_footer\', function(){
    global $wp_query; 
    echo "<pre>".print_r($wp_query,true)."</pre>";
    //if (is_category(10) || cat_is_ancestor_of(10, get_query_var(\'cat\')))
    //  echo "<mark> Hello</mark>";
});
如果它真的起作用了,或者你解决了它为什么不起作用,我们就会成功。你的条件很好。现在只需添加脚本:

add_action(\'wp_footer\', function(){
    if (is_category(10) || cat_is_ancestor_of(10, get_query_var(\'cat\'))) {
        ?>
        <script>
            document.getElementsByClassName(\'logo\')[0].src =\'adventurelogo.png\';
        </script>
        <?php
    }
});
如果这不起作用,但Hello消息起作用,那么您的问题是Javascript代码。很可能也是这样,仔细看JS代码,您使用的是徽标作为相对路径,如果您使用命名的永久链接,这将不起作用。您需要一个带有完整图像URL的图像src。假设adventurelogo.png 是你主题的根源,更像是:

add_action(\'wp_footer\', function(){
    if (is_category(10) || cat_is_ancestor_of(10, get_query_var(\'cat\'))) {
        ?>
        <script>
        var newLogo = \'<?= get_template_directory_uri() ?>/adventurelogo.png\';
        document.getElementsByClassName(\'logo\')[0].src = newLogo
        </script>
        <?php
    }
});

结束

相关推荐

PHP通知:未识别的索引

创建自定义帖子类型的新帖子时debug.log 充满了PHP Notice: Unidentified index: 每个元字段的警告。这个问题以前已经问过并回答过了here 我在那里实现了解决方案,但每次我创建这种类型的新帖子时,我仍然会看到debug.log.save方法的代码如下:/** Listener for saving post */ public function save() { $post_type_name = $this->post_type_name