插件功能仅启用自定义帖子类型

凯恩

我是新开发者。我遇到了一个问题。我已经激活了一个插件以供评论使用。现在,它显示在所有类型的帖子页面中。但我想显示此评论仅适用于我的自定义帖子类型xyz我怎样才能做到这一点?如果帖子类型xyz在评论插件中,但我无法使用,我已经使用此代码启用add_action 插入

add_action('save_post','save_post_callback');
function save_post_callback($post_id){
    global $post; 
    if ($post->post_type = 'xyz'){
        add_action( 'comment_form_logged_in_after', 'ci_comment_rating_rating_field' );
        add_action( 'comment_form_after_fields', 'ci_comment_rating_rating_field' );
        return;
    }
    //if you get here then it's your post type so do your thing....
}

试试这个代码

<?php
/*
Plugin Name: CI Comment Rating
Description: Adds a star rating system to WordPress comments
Version: 1.0.0
Author: The CSSIgniter Team
Author URI: https://cssigniter.com/
*/
//Enqueue the plugin's styles.
add_action( 'wp_enqueue_scripts', 'ci_comment_rating_styles' );
function ci_comment_rating_styles() {
    wp_register_style( 'ci-comment-rating-styles', plugins_url( '/', __FILE__ ) . 'assets/style.css' );
    wp_enqueue_style( 'dashicons' );
    wp_enqueue_style( 'ci-comment-rating-styles' );
}


//Create the rating interface.
add_action( 'comment_form_logged_in_after', 'ci_comment_rating_rating_field' );
add_action( 'comment_form_after_fields', 'ci_comment_rating_rating_field' );

function ci_comment_rating_rating_field () {
  global $post_type;
    if($post_type =='xyz'){

    ?>
    <label for="rating">Rating<span class="required">*</span></label>
    <fieldset class="comments-rating">
        <span class="rating-container">
            <?php for ( $i = 5; $i >= 1; $i-- ) : ?>
                <input type="radio" id="rating-<?php echo esc_attr( $i ); ?>" name="rating" value="<?php echo esc_attr( $i ); ?>" /><label for="rating-<?php echo esc_attr( $i ); ?>"><?php echo esc_html( $i ); ?></label>
            <?php endfor; ?>
            <input type="radio" id="rating-0" class="star-cb-clear" name="rating" value="0" /><label for="rating-0">0</label>
        </span>
    </fieldset>
    <?php
    }
}
//Save the rating submitted by the user.
add_action( 'comment_post', 'ci_comment_rating_save_comment_rating' );
function ci_comment_rating_save_comment_rating( $comment_id ) {
    if ( ( isset( $_POST['rating'] ) ) && ( '' !== $_POST['rating'] ) )
    $rating = intval( $_POST['rating'] );
    add_comment_meta( $comment_id, 'rating', $rating );
}
//Make the rating required.
add_filter( 'preprocess_comment', 'ci_comment_rating_require_rating' );
function ci_comment_rating_require_rating( $commentdata ) {
    if ( ! isset( $_POST['rating'] ) || 0 === intval( $_POST['rating'] ) )
    wp_die( __( 'Error: You did not add a rating. Hit the Back button on your Web browser and resubmit your comment with a rating.' ) );
    return $commentdata;
}
//Display the rating on a submitted comment.
add_filter( 'comment_text', 'ci_comment_rating_display_rating');
function ci_comment_rating_display_rating( $comment_text ){
    if ( $rating = get_comment_meta( get_comment_ID(), 'rating', true ) ) {
        $stars = '<p class="stars">';
        for ( $i = 1; $i <= $rating; $i++ ) {
            $stars .= '<span class="dashicons dashicons-star-filled"></span>';
        }
        $stars .= '</p>';
        $comment_text = $comment_text . $stars;
        return $comment_text;
    } else {
        return $comment_text;
    }
}
// Collect post dating data.
function ci_comment_rating_get_ratings_data( $id ) {
    $comments = get_approved_comments( $id );
    if ( $comments ) {
        $i = 0;
        $total = 0;
        foreach( $comments as $comment ){
            $rate = get_comment_meta( $comment->comment_ID, 'rating', true );
            if( isset( $rate ) && '' !== $rate ) {
                $i++;
                $total += $rate;
            }
        }
        if ( 0 === $i ) {
            return false;
        } else {
            return $rating_data = array(
                'reviews' => $i,
                'total'   => $total,
            );
        }
    } else {
        return false;
    }
}
//Display the average rating above the content.
add_filter( 'the_content', 'ci_comment_rating_display_average_rating' );
function ci_comment_rating_display_average_rating( $content ) {
    global $post;
    if ( false === ci_comment_rating_get_ratings_data( $post->ID ) ) {
        return $content;
    }
    $stars       = '';  
    $rating_data = ci_comment_rating_get_ratings_data( $post->ID );
    $average     = round( $rating_data['total'] / $rating_data['reviews'], 1 );;
    for ( $i = 1; $i <= $average + 1; $i++ ) {
        $width = intval( $i - $average > 0 ? 20 - ( ( $i - $average ) * 20 ) : 20 );
        if ( 0 === $width ) {
            continue;
        }
        $stars .= '<span style="overflow:hidden; width:' . $width . 'px" class="dashicons dashicons-star-filled"></span>';
        if ( $i - $average > 0 ) {
            $stars .= '<span style="overflow:hidden; position:relative; left:-' . $width .'px;" class="dashicons dashicons-star-empty"></span>';
        }
    }
    $custom_content  = '<p class="average-rating">This post\'s average rating is: ' . $average .' ' . $stars .' calculated from '. $rating_data['reviews'] .' reviews.</p>';
    $custom_content .= $content;
    return $custom_content;
}

我已经更新了下面的ci_comment_rating_rating_field功能代码

 global $post_type;
  if($post_type =='xyz'){

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

自定义帖子类型仅显示最近的帖子

Wordpress插件自定义帖子类型单页

自定义帖子类型注册功能隐藏页面

在“功能插件”中为自定义帖子类型注册分类法会导致错误500

仅显示特定自定义帖子类型的自定义分类法计数

禁用自定义帖子类型

查看自定义帖子类型

自定义帖子类型错误

自定义帖子类型-存档

循环自定义帖子类型

WordPress自定义帖子类型

自定义帖子类型中的“ __(”

在工具集类型插件上显示自定义帖子类型

查询自定义帖子类型并按自定义帖子类型排序

Wordpress:如何通过插件中的自定义帖子类型函数调用函数?

通过子主题函数向PHP插件自定义帖子类型添加选项

插件激活后创建自定义帖子类型,停用后将其删除-Wordpress

Wordpress-插件中帖子类型的自定义存档页面

如何使用WPML插件显示不同语言的自定义帖子类型列表?

无法在插件中使用自定义帖子类型分类模板

如何在自定义帖子类型小部件插件的最后添加更多按钮

向Woocommerce添加自定义帖子类型/帖子

Wordpress 自定义帖子类型当前帖子

WordPress的自定义帖子类型帖子不显示

在WordPress的自定义帖子类型的永久链接中仅显示特定类别

WordPress自定义帖子类型存档小部件,仅显示CPT

如何使用自定义帖子类型仅显示一种分类法?

仅获取自定义帖子类型的子条款

为什么我的自定义帖子类型仅针对我的自定义用户角色显示?