如何在Woodmart主题中为Portfolio自定义文章类型启用评论?
为Woodmart主题的Portfolio自定义文章类型启用评论功能
问题原因
你之前试的两段代码没生效,主要是Woodmart主题注册Portfolio自定义文章类型的优先级比你的代码高,或者主题注册后又移除了评论支持;另外默认的Portfolio文章评论状态是关闭的,就算加了功能支持也得手动开启。
解决方案
1. 调高钩子优先级,覆盖主题设置
把过滤器的优先级设得比主题高,确保在主题注册完Portfolio之后再修改参数:
function woodmart_enable_comments_on_portfolio( $args, $post_type ) { if ( $post_type === 'portfolio' ) { // 避免重复添加评论支持 if ( !in_array( 'comments', $args['supports'] ) ) { $args['supports'][] = 'comments'; } // 新创建的Portfolio文章默认开启评论 $args['comment_status'] = 'open'; } return $args; } add_filter( 'register_post_type_args', 'woodmart_enable_comments_on_portfolio', 20, 2 );
2. 强制添加评论支持(防止主题移除)
如果上面的代码还是没用,说明主题可能在注册后又删掉了评论支持,用这个钩子在主题初始化完成后强制添加:
function woodmart_force_portfolio_comments() { add_post_type_support( 'portfolio', 'comments' ); // 直接修改全局的文章类型设置 global $wp_post_types; if ( isset( $wp_post_types['portfolio'] ) ) { $wp_post_types['portfolio']->comment_status = 'open'; $wp_post_types['portfolio']->supports['comments'] = true; } } add_action( 'after_setup_theme', 'woodmart_force_portfolio_comments', 30 );
3. 批量开启已有Portfolio文章的评论
之前创建的Portfolio文章默认评论是关的,用这段代码批量打开(执行一次后就删掉或注释掉,避免重复执行):
function woodmart_enable_existing_portfolio_comments() { $portfolio_posts = get_posts( array( 'post_type' => 'portfolio', 'posts_per_page' => -1, 'post_status' => 'publish' ) ); foreach ( $portfolio_posts as $post ) { wp_update_post( array( 'ID' => $post->ID, 'comment_status' => 'open' ) ); } } add_action( 'init', 'woodmart_enable_existing_portfolio_comments' );
4. 确保模板里有评论区域
最后检查Woodmart的Portfolio单页模板(一般是single-portfolio.php,可能在主题的templates文件夹里),如果底部没有评论区,就在内容结束的地方加这段代码:
if ( comments_open() || get_comments_number() ) { comments_template(); }
怕改主题文件丢代码的话,建议用子主题,把原主题的single-portfolio.php复制到子主题里再修改。
内容的提问来源于stack exchange,提问作者MohsenJames Amra
相关产品推荐
相关产品推荐

