我想隐藏评论为空的产品标题下面的星级。我想只隐藏星级,但不能留下新评论。我找到了一个类似的解决方案来隐藏不同的元素,并尝试采用它。
我使用一个snippets插件添加了这个,当评论为空时,在body_class中添加一个类“hide-empty-stars”。
function check_for_empty_stars( $classes ) {
global $product;
$id = $product->get_id();
$args = array ('post_type' => 'product', 'post_id' => $id);
$comments = get_comments( $args );
if(empty($comments)) {
$classes[] = 'hide-empty-stars';
}
return $classes;
}
add_filter( 'body_class', 'check_for_empty_stars' );
然后使用css隐藏星级类
body.hide-empty-stars .star-rating{
display: none;
}
它工作,但过了一段时间,我得到了一个严重的错误,日志说
mod_fcgid: stderr: PHP Fatal error: Uncaught Error: Call to a member function get_id() on null in /var/www/vhosts/my-domain.gr/httpdocs/wp-content/plugins/code-snippets/php/snippet-ops.php(505) : eval()'d code:3
是什么导致的?我的代码有什么问题吗?
1条答案
按热度按时间a64a0gku1#
当您不在产品页面时会发生这种情况。
body_class
在每个页面上运行,但有些页面没有帖子ID -例如类别页面。只有在定义了帖子ID的情况下才应运行代码段。假设您正在查看显示某个类别的页面-没有$product
变量,但您试图在$product
上调用get_id();
,因此会出现错误。也许可以尝试用if语句来 Package 它?
或者只是寻找只在产品页面上运行的过滤器。另外-你不需要任何插件,如代码片段。你可以只把这个代码放在你的child-theme的functions.php文件中。阅读有关child-theme的信息,如果你想修改主题,这些都是很好的,而且更新后你不会丢失你的更改。https://developer.wordpress.org/themes/advanced-topics/child-themes/