为什么不使用特定于ID的CSS规则:
发布特定于ID的CSS只能是一个快速修复方法,这远远不是最佳实践。Post ID在许多情况下都不可靠。例如:
你可能会删除一篇帖子,并用一篇新帖子替换。
将来您可能需要将站点迁移到另一台服务器。
您可能正在创建更新版本的帖子/页面,并希望在替换旧帖子/页面之前查看新帖子/页面。
在所有这些情况下,帖子ID可能会发生变化,而那些特定于ID的CSS将不再适用。因此,您必须再次更新CSS以满足您的设计需要。WordPress是非常可定制的,因此没有任何场景需要使用基于post ID的CSS规则。对于更成熟的开发和设计实践,强烈建议不要使用特定于ID的CSS规则。相反,请使用以下选项之一:
使用页面模板:
WordPress支持
page templates 对于长期使用的页面和版本
4.7
WordPress支持
page templates for any post type. 如果你有WordPress
4.7
或更高版本,然后您可以为子主题中的任何帖子或页面创建特定的页面模板。
这样,您根本不需要任何特定于ID的CSS,因为一旦您拥有这些特定的模板,无论何时您需要对任何页面或帖子进行相同的设计,您只需从帖子或页面编辑器中选择相同的模板。仅此而已。之后,该页面模板的设计将应用于page
, post
或custom post type
.
如果您不想转到管理面板中的不同页面或帖子来分配特定模板(可能您有很多页面/帖子),那么您可以使用
post_class
过滤器挂钩。这样,您就可以为需要它们的不同帖子和页面分配独特的CSS类,并根据这些CSS类设置样式。例如,假设您有一个自定义的帖子类型
movie
&;您需要不同的CSS类
movie
条目。然后在你的主题中
functions.php
文件中,可以添加以下代码:
add_filter( \'post_class\', \'movie_post_class\' );
function movie_post_class( $class ) {
if ( get_post_type() === \'movie\' ) {
// remove these CSS classes from movie entries
$remove = array( \'css-class-to-remove\', \'another-class-to-remove\' );
$class = array_diff( $class, $remove );
// add these custom CSS classes to movie entries
$add = array( \'custom-movie\', \'my-movie-class\' );
$class = array_merge( $add, $class );
}
return $class;
}
现在,您可以使用以下CSS以电影实体为目标:
.custom-movie {
background-color: gold;
}
使用
body_class
过滤器挂钩:在某些情况下,如果您不想使用页面模板,并且需要对整个页面设计进行更通用的控制(与
post_class
将提供),然后您可以修改
<body>
使用
body_class
过滤器挂钩(与
post_class
过滤器挂钩)。像这样:
add_filter( \'body_class\', \'movie_body_class\' );
function movie_body_class( $class ) {
if ( is_single() && get_post_type() === \'movie\' ) {
// remove these CSS classes from body class
$remove = array( \'css-class-to-remove\', \'another-class-to-remove\' );
$class = array_diff( $class, $remove );
// add these custom CSS classes to body class of a movie post
$add = array( \'custom-movie\', \'my-movie-class\' );
$class = array_merge( $add, $class );
}
return $class;
}
现在,您可以使用以下CSS以电影自定义贴子页面为目标:
body.custom-movie .any-inner-content-class {
color: blue;
}
由于此自定义类是在
<body>
, 您可以通过这种方式将页面中的任何元素作为目标。