插件功能仅支持自定义帖子类型

问题描述 投票:1回答:1

我是一名新开发人员。我遇到了一个问题。我已经激活了一个用于评论的插件。现在它在所有类型的帖子页面中显示。但我想显示此评论只针对我的自定义帖子类型xyz。我怎样才能做到这一点?我已经使用此代码启用add_action,如果帖子类型是xyz在评论鼠标插件但它无法正常工作。 Plugin

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 wordpress custom-post-type
1个回答
0
投票

试试这个代码

<?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'){
© www.soinside.com 2019 - 2024. All rights reserved.