: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
'<div class="wpr-%1$s-features-rating" data-type="%2$s" data-nonce="%3$s" data-post_id="%4$s">',
esc_attr( $args['type'] ),
esc_attr( wp_create_nonce( 'wpr_user_features_rating' ) ),
$output .= '<h5 class="user-review-title">' . __( 'User Review', 'wp-review' ) . '</h5>';
$output .= '<ul class="features-rating-list review-list">';
$features = wp_review_get_review_items( $post_id );
$reviews = wp_review_get_post_feature_reviews( $post_id, false, $args['type'] );
if ( is_array( $features ) && ! empty( $features ) ) {
foreach ( $features as $feature_id => $feature ) {
if ( ! isset( $reviews[ $feature_id ] ) ) {
$review = $reviews[ $feature_id ];
$value = intval( $review['count'] ) ? $review['total'] / $review['count'] : 0;
$value_text = '<span>' . sprintf( $rating_type['value_text'], $value ) . '</span> - ';
if ( ! $user_has_reviewed ) {
$rating_output .= sprintf(
'<div class="wp-review-%1$s-rating wp-review-user-feature-rating-%2$s" data-feature-id="%3$s">',
esc_attr( $args['type'] ),
if ( ! empty( $feature['wp_review_item_color'] ) ) {
$color = $feature['wp_review_item_color'];
$colors['color'] = $color;
if ( ! empty( $feature['wp_review_item_inactive_color'] ) ) {
$inactive_color = $feature['wp_review_item_inactive_color'];
$colors['inactive_color'] = $inactive_color;
$args['positive_count'] = ! empty( $review['positive'] ) ? $review['positive'] : 0;
$args['negative_count'] = ! empty( $review['negative'] ) ? $review['negative'] : 0;
set_query_var( 'rating', compact( 'value', 'post_id', 'comment_rating', 'color', 'colors', 'feature_id', 'args' ) );
load_template( $rating_type_template, false );
$rating_output .= ob_get_clean();
if ( ! $user_has_reviewed ) {
$rating_output .= '</div>';
if ( ! in_array( $type, array( 'star' ) ) && $user_has_reviewed ) {
$title_output .= '<span>' . wp_kses_post( $feature['wp_review_item_title'] . $value_text ) . '</span>';
$title_output .= '<span>' . wp_kses_post( $feature['wp_review_item_title'] ) . '</span>';
if ( ! empty( $args['title_first'] ) || ! isset( $args['title_first'] ) && 'star' === $type ) {
// Star rating is rendered after by default.
$output .= $title_output;
$output .= $rating_output;
$output .= $rating_output;
$output .= $title_output;
'<button type="button" class="wpr-rating-accept-btn" style="display: none;" disabled>%s</button>',
esc_html__( 'Submit', 'wp-review' )
$output .= '</div><!-- End .wpr-user-features-rating -->';
* Gets user comments rating.
* @param int $post_id Post ID.
* @param array $args Custom args.
function wp_review_user_comments_rating( $post_id = null, $args = array() ) {
$type = wp_review_get_post_user_review_type( $post_id );
if ( 'none' === $type ) {
$post_reviews = mts_get_post_comments_reviews( $post_id );
$value = $post_reviews['rating'];
$args['positive_count'] = isset( $post_reviews['positive_count'] ) ? $post_reviews['positive_count'] : 0;
$args['negative_count'] = isset( $post_reviews['negative_count'] ) ? $post_reviews['negative_count'] : 0;
$args['user_rating'] = true;
$args['comment_rating'] = true;
return wp_review_rating( $value, $post_id, $args ); // Return just output template.
// Not use the_content filter.
add_filter( 'wp_review_desc', array( $wp_embed, 'run_shortcode' ), 8 );
add_filter( 'wp_review_desc', array( $wp_embed, 'autoembed' ), 8 );
add_filter( 'wp_review_desc', 'wptexturize' );
add_filter( 'wp_review_desc', 'convert_smilies', 20 );
add_filter( 'wp_review_desc', 'wpautop' );
add_filter( 'wp_review_desc', 'shortcode_unautop' );
add_filter( 'wp_review_desc', 'do_shortcode', 11 );
* @param int $post_id Post ID. Default is current post ID.
* @param array $args Custom arguments. Use for filtering result.
function wp_review_get_review_data( $post_id = null, $args = array() ) {
$data['post_id'] = $post_id;
$data['heading'] = get_post_meta( $post_id, 'wp_review_heading', true );
$desc_title = get_post_meta( $post_id, 'wp_review_desc_title', true );
$desc_title = __( 'Summary', 'wp-review' );
$data['desc_title'] = $desc_title;
$data['desc'] = get_post_meta( $post_id, 'wp_review_desc', true );
$data['product_price'] = wp_review_get_product_price( $post_id );
$data['items'] = wp_review_get_review_items( $post_id );
$data['disable_features'] = get_post_meta( $post_id, 'wp_review_disable_features', true );
$data['type'] = wp_review_get_post_review_type( $post_id );
$data['total'] = get_post_meta( $post_id, 'wp_review_total', true );
$data['total'] = wp_review_normalize_rating_value( $data['total'], $data['type'] );
$data['hide_desc'] = get_post_meta( $post_id, 'wp_review_hide_desc', true );
$data['schema'] = wp_review_get_review_schema( $post_id );
$data['schema_data'] = get_post_meta( $post_id, 'wp_review_schema_options', true );
$data['show_schema_data'] = get_post_meta( $post_id, 'wp_review_show_schema_data', true );
$data['rating_schema'] = wp_review_get_rating_schema( $post_id );
$data['links'] = wp_review_get_review_links( $post_id );
$custom_author = get_post_meta( $post_id, 'wp_review_custom_author', true );
$author_field = get_post_meta( $post_id, 'wp_review_author', true );
$data['author'] = ( ! $author_field || empty( $author_field ) || ! $custom_author ) ? get_the_author() : $author_field;
$colors = wp_review_get_colors( $post_id );
$data['colors'] = $colors;
$user_review = in_array( wp_review_get_user_rating_setup( $post_id ), array( WP_REVIEW_REVIEW_VISITOR_ONLY, WP_REVIEW_REVIEW_ALLOW_BOTH ) );
$comments_review = in_array( wp_review_get_user_rating_setup( $post_id ), array( WP_REVIEW_REVIEW_COMMENT_ONLY, WP_REVIEW_REVIEW_ALLOW_BOTH ) );
$user_review_positive = '';
$user_review_negative = '';
$user_has_reviewed = false;
if ( $user_review || $comments_review ) {
$user_review_type = wp_review_get_post_user_review_type( $post_id );
$post_reviews = mts_get_post_reviews( $post_id );
$user_review_total = $post_reviews['rating'];
$user_review_count = $post_reviews['count'];
$user_review_positive = $post_reviews['positive_count'];
$user_review_negative = $post_reviews['negative_count'];
$user_id = is_user_logged_in() ? get_current_user_id() : 0;
$uip = wp_review_get_user_ip();
if ( wp_review_has_reviewed( $post_id, $user_id, $uip, WP_REVIEW_COMMENT_TYPE_VISITOR ) ) {
$user_has_reviewed = true;
$data['user_review'] = $user_review;
$data['comments_review'] = $comments_review;
$data['user_review_type'] = $user_review_type;
$data['user_review_total'] = $user_review_total;
$data['user_review_count'] = $user_review_count;
$data['user_review_positive'] = $user_review_positive;
$data['user_review_negative'] = $user_review_negative;
$data['user_has_reviewed'] = $user_has_reviewed;
$data['hide_comments_rating'] = get_post_meta( $post_id, 'wp_review_hide_comments_total', true );
$hide_user_reviews = wp_review_network_option( 'hide_user_reviews_' );
if ( $hide_user_reviews ) {
$data['user_review'] = false;
$data['comments_review'] = false;
$hide_desc = wp_review_network_option( 'hide_review_description_' );
$data['hide_desc'] = true;
$hide_links = wp_review_network_option( 'hide_review_links_' );
$hide_features = wp_review_network_option( 'hide_features_' );
$data['disable_features'] = true;
* @hooked wp_review_force_hiding_review_elements() - 10
* @param array $data Review data.
* @param array $args Custom arguments.
return apply_filters( 'wp_review_get_review_data', $data, $args );
* Gets review color data.
* @param int $post_id Post ID.
function wp_review_get_colors( $post_id ) {
$color_options = wp_review_get_global_colors();
$custom_colors = get_post_meta( $post_id, 'wp_review_custom_colors', true );
$colors['custom_colors'] = $custom_colors;
$colors['custom_location'] = get_post_meta( $post_id, 'wp_review_custom_location', true );
$colors['color'] = get_post_meta( $post_id, 'wp_review_color', true );
$colors['inactive_color'] = get_post_meta( $post_id, 'wp_review_inactive_color', true );
$colors['type'] = wp_review_get_post_review_type( $post_id );
$colors['fontcolor'] = get_post_meta( $post_id, 'wp_review_fontcolor', true );
$colors['bgcolor1'] = get_post_meta( $post_id, 'wp_review_bgcolor1', true );
$colors['bgcolor2'] = get_post_meta( $post_id, 'wp_review_bgcolor2', true );
$colors['bordercolor'] = get_post_meta( $post_id, 'wp_review_bordercolor', true );
if ( ! $custom_colors && is_array( $color_options ) ) {
$colors = array_merge( $colors, $color_options );
foreach ( $colors as $key => $color_value ) {
if ( ! $color_value && ! empty( $color_options[ $key ] ) ) {
$colors[ $key ] = $color_options[ $key ];
return apply_filters( 'wp_review_colors', $colors, $post_id );
* Forces hiding review element based on custom arguments.
* @param array $review Review data.
* @param array $args Custom arguments.
function wp_review_force_hiding_review_elements( $review, $args ) {
if ( ! empty( $args['hide_heading'] ) ) {
if ( ! empty( $args['hide_desc'] ) ) {
$review['hide_desc'] = true;
if ( ! empty( $args['hide_rating_box'] ) ) {
$review['user_review'] = false;
$review['comments_review'] = false;
if ( ! empty( $args['hide_links'] ) ) {
$review['links'] = array();
add_filter( 'wp_review_get_review_data', 'wp_review_force_hiding_review_elements', 10, 2 );
* Returns WP Review box html using the box template chosen for the review.
* Replaces wp_review_get_data()
* @param int $post_id Post ID.
* @return string Review box output.
function wp_review_get_review_box( $post_id = null ) {
$hide_user_reviews = wp_review_network_option( 'hide_ratings_in_posts_' );
if ( ! wp_review_is_enable( $post_id ) || $hide_user_reviews ) {
// WPML workaround to show translated post data instead of original post.
if ( is_singular() && function_exists( 'icl_object_id' ) ) {
$review_data = wp_review_get_review_data( $post_id );
$template = wp_review_get_post_box_template( $post_id );
$box_template_path = wp_review_locate_box_template( $template );
$template_id = rtrim( $template, '.php' );
"wp-review-{$review_data['post_id']}",
"wp-review-{$review_data['type']}-type",
"wp-review-{$template_id}-template",
'wp-review-box-full-width',
$review_data['css_classes'] = $css_classes;
// Pass variables to template.
set_query_var( 'review', $review_data );
load_template( $box_template_path, false );
$review = ob_get_contents();
$review = apply_filters( 'wp_review_get_data', $review, $review_data['post_id'], $review_data['type'], $review_data['total'], $review_data['items'] );
* Gets box template info.
* @param bool $template Template name.
function wp_review_get_box_template_info( $template = false ) {
$default_template_headers = array(
'TemplateURI' => 'Template URI',
'Description' => 'Description',
'AuthorURI' => 'Author URI',
$template = wp_review_get_post_box_template();
$path = wp_review_locate_box_template( $template );
return get_file_data( $path, $default_template_headers );
return array( $default_template_headers );
* Returns absolute path to template directory.
function wp_review_get_box_template_directory() {
$template = wp_review_get_post_box_template();
$current_template_directory = wp_review_locate_box_template( $template );
return dirname( $current_template_directory );
* Returns template directory URI. To be used in template file.
function wp_review_get_box_template_directory_uri() {
// Let's hope this will work in most cases.
return get_bloginfo( 'url' ) . '/' . str_replace( ABSPATH, '', wp_review_get_box_template_directory() );
* Gets box templates list.
function wp_review_get_box_templates_list() {
WP_REVIEW_DIR . 'box-templates',
get_template_directory() . '/wp-review',
get_stylesheet_directory() . '/wp-review',
$paths = apply_filters( 'wp_review_box_template_paths', $default_paths );
foreach ( $paths as $path ) {
$path = trailingslashit( $path );
// Look for files containing our header 'Launcher template'.
$files = (array) wp_review_scandir( $path, 'php', 2 );
foreach ( $files as $file => $full_path ) {
if ( ! $full_path || ! preg_match( '|WP Review:(.*)$|mi', file_get_contents( $full_path ), $header ) ) {
$templates[ $file ] = wp_review_get_box_template_info( $file );
$templates[ $file ]['path'] = $path;
* @param string $path Directory path.
* @param array $extensions Extensions.
* @param int $depth Depth.
* @param string $relative_path Relative path.
function wp_review_scandir( $path, $extensions = null, $depth = 0, $relative_path = '' ) {
if ( ! is_dir( $path ) ) {
$extensions = (array) $extensions;
$_extensions = implode( '|', $extensions );
$relative_path = trailingslashit( $relative_path );
if ( '/' == $relative_path ) {
$results = scandir( $path );
foreach ( $results as $result ) {
if ( '.' == $result[0] ) {
if ( is_dir( $path . '/' . $result ) ) {
if ( ! $depth || 'CVS' == $result ) {
$found = wp_review_scandir( $path . '/' . $result, $extensions, $depth - 1, $relative_path . $result );
$files = array_merge_recursive( $files, $found );
} elseif ( ! $extensions || preg_match( '~\.(' . $_extensions . ')$~', $result ) ) {
$files[ $relative_path . $result ] = $path . '/' . $result;