: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
'wp_review_total' => filter_input( INPUT_POST, 'wp_review_total', FILTER_SANITIZE_STRING ),
'wp_review_color' => filter_input( INPUT_POST, 'wp_review_color', FILTER_SANITIZE_STRING ),
'wp_review_inactive_color' => filter_input( INPUT_POST, 'wp_review_inactive_color', FILTER_SANITIZE_STRING ),
'wp_review_fontcolor' => filter_input( INPUT_POST, 'wp_review_fontcolor', FILTER_SANITIZE_STRING ),
'wp_review_bgcolor1' => filter_input( INPUT_POST, 'wp_review_bgcolor1', FILTER_SANITIZE_STRING ),
'wp_review_bgcolor2' => filter_input( INPUT_POST, 'wp_review_bgcolor2', FILTER_SANITIZE_STRING ),
'wp_review_bordercolor' => filter_input( INPUT_POST, 'wp_review_bordercolor', FILTER_SANITIZE_STRING ),
'wp_review_author' => filter_input( INPUT_POST, 'wp_review_author', FILTER_SANITIZE_STRING ),
'wp_review_schema' => filter_input( INPUT_POST, 'wp_review_schema', FILTER_SANITIZE_STRING ),
'wp_review_rating_schema' => filter_input( INPUT_POST, 'wp_review_rating_schema', FILTER_SANITIZE_STRING ),
'wp_review_show_schema_data' => filter_input( INPUT_POST, 'wp_review_show_schema_data', FILTER_SANITIZE_STRING ),
'wp_review_user_review_type' => filter_input( INPUT_POST, 'wp_review_user_review_type', FILTER_SANITIZE_STRING ),
'wp_review_product_price' => filter_input( INPUT_POST, 'wp_review_product_price', FILTER_SANITIZE_STRING ),
'wp_review_box_template' => filter_input( INPUT_POST, 'wp_review_box_template', FILTER_SANITIZE_STRING ),
$default_colors = wp_review_get_global_colors();
$default_color = $default_colors['color'];
$default_inactive = $default_colors['inactive_color'];
if ( $meta['wp_review_color'] === $default_color ) {
$meta['wp_review_color'] = '';
if ( $meta['wp_review_inactive_color'] === $default_inactive ) {
$meta['wp_review_inactive_color'] = '';
foreach ( $meta as $meta_key => $new_meta_value ) {
$new_meta_value = wp_review_normalize_option_value( $new_meta_value );
if ( false === $new_meta_value ) {
if ( 'wp_review_box_template' === $meta_key && ! in_array( $new_meta_value, array( 'default', 'aqua' ), true ) ) {
if ( current_user_can( 'delete_post_meta', $post_id ) && '' === $new_meta_value ) {
delete_post_meta( $post_id, $meta_key );
if ( current_user_can( 'edit_post_meta', $post_id ) ) {
update_post_meta( $post_id, $meta_key, $new_meta_value );
wp_review_save_review_items_data( $post_id );
$old = get_post_meta( $post_id, 'wp_review_item', true );
$link_text = (array) filter_input( INPUT_POST, 'wp_review_link_title', FILTER_SANITIZE_STRING, FILTER_FORCE_ARRAY );
$link_url = (array) filter_input( INPUT_POST, 'wp_review_link_url', FILTER_SANITIZE_STRING, FILTER_FORCE_ARRAY );
if ( ! empty( $link_text ) ) {
foreach ( $link_text as $key => $text ) {
if ( ! empty( $text ) && ! empty( $link_url[ $key ] ) ) {
'url' => $link_url[ $key ],
if ( empty( $new_links ) ) {
delete_post_meta( $post_id, 'wp_review_links' );
update_post_meta( $post_id, 'wp_review_links', $new_links );
if ( isset( $_POST['wp_review_schema_options'] ) ) {
update_post_meta( $post_id, 'wp_review_schema_options', $_POST['wp_review_schema_options'] );
* Delete all data when switched to 'No Review' type.
if ( 'none' === $type ) {
delete_post_meta( $post_id, 'wp_review_desc', $_POST['wp_review_desc'] );
delete_post_meta( $post_id, 'wp_review_heading', $_POST['wp_review_heading'] );
delete_post_meta( $post_id, 'wp_review_userReview', $_POST['wp_review_userReview'] );
delete_post_meta( $post_id, 'wp_review_item', $old );
* @param int $post_id Post ID.
* @param WP_Post $post Post object.
function wp_review_clear_query_cache( $post_id, $post ) {
$where = $wpdb->prepare( 'WHERE option_name REGEXP %s', '_transient(_timeout)?_wp_review_[0-9a-f]{32}' );
$wpdb->query( "DELETE FROM {$wpdb->prefix}options {$where}" ); // WPCS: unprepared SQL ok.
* Saves review items data.
* @param int $post_id Post ID.
function wp_review_save_review_items_data( $post_id ) {
$old = get_post_meta( $post_id, 'wp_review_item', true );
if ( ! empty( $_POST['wp_review_item_title'] ) ) { // WPCS: csrf ok.
$title = $_POST['wp_review_item_title']; // WPCS: csrf ok.
$star = $_POST['wp_review_item_star']; // WPCS: csrf ok.
$ids = $_POST['wp_review_item_id']; // WPCS: csrf ok.
$count = count( $title );
for ( $i = 0; $i < $count; $i++ ) {
if ( empty( $star[ $i ] ) ) {
continue; // Prevent item without score.
$new[ $i ]['wp_review_item_star'] = floatval( $star[ $i ] );
if ( ! empty( $ids[ $i ] ) ) {
$new[ $i ]['id'] = sanitize_text_field( wp_unslash( $ids[ $i ] ) );
if ( ! empty( $title[ $i ] ) ) {
$new[ $i ]['wp_review_item_title'] = sanitize_text_field( wp_unslash( $title[ $i ] ) );
if ( ! empty( $new ) && $new !== $old ) {
update_post_meta( $post_id, 'wp_review_item', $new );
} elseif ( empty( $new ) && $old ) {
delete_post_meta( $post_id, 'wp_review_item', $old );
delete_post_meta( $post_id, 'wp_review_item' );
* With this code, the review meta data will actually get saved on Preview.
* @param array $fields Revision fields.
function add_field_debug_preview( $fields ) {
$fields['debug_preview'] = 'debug_preview';
add_filter( '_wp_post_revision_fields', 'add_field_debug_preview' );
* Adds input debug preview.
function add_input_debug_preview() {
echo '<input type="hidden" name="debug_preview" value="debug_preview">';
add_action( 'edit_form_after_title', 'add_input_debug_preview' );
* @param array $args Args.
* @param array $value Schema value.
* @param string $schema_type Schema type.
function wp_review_schema_field( $args, $value, $schema_type ) {
$type = isset( $args['type'] ) ? $args['type'] : '';
$name = isset( $args['name'] ) ? $args['name'] : '';
$label = isset( $args['label'] ) ? $args['label'] : '';
$options = isset( $args['options'] ) ? $args['options'] : array();
$default = isset( $args['default'] ) ? $args['default'] : '';
$min = isset( $args['min'] ) ? $args['min'] : '0';
$max = isset( $args['max'] ) ? $args['max'] : '';
$info = isset( $args['info'] ) ? $args['info'] : '';
$opt_val = isset( $value[ $name ] ) ? $value[ $name ] : $default;
$opt_id_attr = 'wp_review_schema_options_' . $schema_type . '_' . $name;
$opt_name_attr = 'wp_review_schema_options[' . $schema_type . '][' . $name . ']';
$form_field = new WP_Review_Form_Field();
<div class="wp-review-field-label">
<label for="<?php echo esc_attr( $opt_id_attr ); ?>" class="wp_review_schema_options_label"><?php echo esc_html( $label ); ?></label>
<div class="wp-review-field-option">
<input type="text" name="<?php echo esc_attr( $opt_name_attr ); ?>" id="<?php echo esc_attr( $opt_id_attr ); ?>" value="<?php echo esc_attr( $opt_val ); ?>" />
<select name="<?php echo esc_attr( $opt_name_attr ); ?>" id="<?php echo esc_attr( $opt_id_attr ); ?>">
<?php foreach ( $options as $val => $label ) { ?>
<option value="<?php echo esc_attr( $val ); ?>" <?php selected( $opt_val, $val, true ); ?>><?php echo esc_html( $label ); ?></option>
<input type="number" step="1" min="<?php echo esc_attr( $min ); ?>" max="<?php echo esc_attr( $max ); ?>" name="<?php echo esc_attr( $opt_name_attr ); ?>" id="<?php echo esc_attr( $opt_id_attr ); ?>" value="<?php echo esc_attr( $opt_val ); ?>" class="small-text">
<textarea name="<?php echo esc_attr( $opt_name_attr ); ?>" id="<?php echo esc_attr( $opt_id_attr ); ?>"><?php echo esc_textarea( $opt_val ); ?></textarea>
<input type="checkbox" name="<?php echo esc_attr( $opt_name_attr ); ?>" id="<?php echo esc_attr( $opt_id_attr ); ?>" value="1" <?php checked( $opt_val, '1', true ); ?> />
<span class="wpr_image_upload_field">
<span class="clearfix" id="<?php echo esc_attr( $opt_id_attr ); ?>-preview">
if ( ! empty( $opt_val['url'] ) ) {
echo '<img class="wpr_image_upload_img" src="' . esc_url( $opt_val['url'] ) . '" />';
<input type="hidden" id="<?php echo esc_attr( $opt_id_attr ); ?>-id" name="<?php echo esc_attr( $opt_name_attr ); ?>[id]" value="<?php if ( isset( $opt_val['id'] ) ) echo $opt_val['id']; // phpcs:ignore ?>" />
<input type="hidden" id="<?php echo esc_attr( $opt_id_attr ); ?>-url" name="<?php echo esc_attr( $opt_name_attr ); ?>[url]" value="<?php if ( isset( $opt_val['url'] ) ) echo $opt_val['url']; // phpcs:ignore ?>" />
<button class="button" name="<?php echo esc_attr( $opt_id_attr ); ?>-upload" id="<?php echo esc_attr( $opt_id_attr ); ?>-upload" data-id="<?php echo esc_attr( $opt_id_attr ); ?>" onclick="wprImageField.uploader( '<?php echo esc_attr( $opt_id_attr ); ?>' ); return false;"><?php esc_html_e( 'Select Image', 'wp-review' ); ?></button>
if ( ! empty( $opt_val['url'] ) ) {
echo '<a href="#" class="button button-link clear-image">' . esc_html__( 'Remove Image', 'wp-review' ) . '</a>';
<span class="clear"></span>
<input class="wpr-datepicker" type="text" name="<?php echo esc_attr( $opt_name_attr ); ?>" id="<?php echo esc_attr( $opt_id_attr ); ?>" value="<?php echo esc_attr( $opt_val ); ?>" size="30" />
'name' => $opt_name_attr,
if ( ! empty( $args['on_label'] ) ) {
$field_args['on_label'] = $args['on_label'];
if ( ! empty( $args['off_label'] ) ) {
$field_args['off_label'] = $args['off_label'];
$form_field->render_switch( $field_args );
if ( ! empty( $info ) ) {
printf( '<p class="description" style="color: #bbb">%s</p>', wp_kses_post( $info ) );