删除特定帖子类型的完整标题和面包屑标题容器

时间:2019-02-08 作者:Rookie Recruits

我一直在研究如何删除标题容器,但只针对函数中使用php的特定post类型。子主题的php文件。例如,公文包或活动。这真的是最好的方法吗?还是使用Javascript更好?

我想这两种语言都有办法做到?但PHP将是理想的选择。

我在stack overflow中找到了一些文章,介绍了如何为特定的帖子ID删除它。它接近我需要的内容,但我需要spot类型本身。

任何人都可以通过函数推荐隐藏或删除包含特定帖子类型标题和面包屑的完整容器的最佳方法。php文件?

我想针对的确切帖子类型是公文包帖子类型或事件帖子类型。它们不是博客文章,也不是页面文章。

谢谢

1 个回复
SO网友:Jacob Peattie

问题是,WordPress中没有“标题”容器的概念。页面上有哪些元素,它们在哪里,以及它们是如何到达那里的,都完全取决于主题。那么,答案是:

任何人都可以通过函数推荐隐藏或删除包含特定帖子类型标题和面包屑的完整容器的最佳方法。php文件?

不是。不是真的。如果没有访问所讨论的特定主题(请记住,第三方主题和插件在这里是离题的)。然而,我将通过一些基本步骤来找到任何给定主题的答案。

但首先,最简单的选择是用CSS隐藏它。这个容器上可能有一个类,您可以将其与single-eventsingle-portfilio 类以直观地隐藏标头(它仍将在HTML中,只是隐藏):

.single-event .header-container-class {
    display: none;
}
通过模板或函数将其完全从代码中删除要复杂得多,但以下是我将经历的步骤:

You need to find where this container is being added.

首先要做的是Template Hierarchy. 使用视觉概览,从左到右移动,直到找到位于子主题或父主题(子主题优先)中的文件。如果您的帖子类型命名为event, 然后您将按以下顺序查找这些模板single-event.php, single.php, singular.php, 然后index.php.

您找到的第一个文件是WordPress为您的帖子类型加载的模板文件。如果single-event.php 不存在,那么您需要从找到的任何文件向后移动,以查看其他哪些内容也将使用该模板。记下这一点。

找到模板后。看看里面。将HTML与前端进行比较,看看是否可以找到要隐藏的容器。如果您可以在模板中找到此内容,那么删除它将非常简单。

If the file was single-{post type}.php: 将模板文件复制到具有相同名称的子主题。然后在副本中,只需删除不需要的HTML即可。WordPress将从您的子主题加载此版本的模板,并且元素不会出现

If the file was not single-{post type}.php: 如果文件不是single-event.phpsingle-portfolio.php 那么这意味着任何更改也会影响常规帖子,甚至可能影响页面。在这种情况下,将文件复制到子主题,但将其重命名为single-{post type}.php 哪里post typeeventportfolio 或者不管职位类型是什么。然后在副本中,删除不需要的HTML。现在,对于此帖子类型,WordPress将从您的子主题加载模板,但未修改的父主题的模板将用于其他帖子类型。

What to do if the template file you found doesn\'t have the HTML you want to remove.

如果模板文件没有要删除的HTML,则可能是从另一个文件中添加的。注意使用的2个功能:get_header()get_template_part().

这些函数将其他模板加载到模板文件中。几乎每个主题中的每个模板都将使用get_header(). 这将加载所有页面上显示的公共标题。这可能包含相关的HTML,但首先我们将查找get_template_part().

如果模板文件使用get_template_part() 那么这可能就是标题容器的来源。此函数的每次使用都将包括一条路径。get_template_part( \'partials/header-container\' ) 表示正在加载模板partials/header-container.php 例如,从主题。

如果模板使用此函数,并且引用的文件包含要删除的HTML,则请按照上面概述的步骤复制single- 模板文件,但不删除HTML,只需删除get_template_part().

如果您仍然没有找到HTML,那么可能正在使用将其添加到每个页面get_header(). 此函数仅包括header.php 将主题文件放入模板中。

看看里面header.php. 如果您在这里找到相关的HTML,那么您将需要一种不同的方法。正在复制header.php 添加到您的子主题并删除HTML将从网站的每个页面中删除它。相反,您需要复制header.php 添加一些Conditional Tag 检查以使相关HTML不会出现在某些页面上。从portfolioevent 将HTML包装在以下标记中的帖子类型:

<?php if ( ! is_singular( \'event\' ) && ! is_singular( \'portfolio\' ) ) : ?>
    <!-- HTML that you don\'t want to display on Events and Portfolios here. -->
<?php endif; ?>
那差不多就是我要去的地方了。如果这没有帮助,那么您的主题可能会做一些不寻常的事情,比如通过挂钩运行所有内容。如果到目前为止还没有解决方案,我建议联系主题作者或查看他们的文档。