: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
* @param WP_Post $post Post object.
function wp_review_render_meta_box_desc( $post ) {
/* Add an nonce field so we can check for it later. */
wp_nonce_field( basename( __FILE__ ), 'wp-review-desc-nonce' );
/* Retrieve existing values from the database. */
$desc = get_post_meta( $post->ID, 'wp_review_desc', true );
$desc_title = get_post_meta( $post->ID, 'wp_review_desc_title', true );
$desc_title = __( 'Summary', 'wp-review' );
$form_field = new WP_Review_Form_Field();
$hidden = wp_review_is_hidden_desc( $post->ID ) ? 'hidden' : '';
<div id="wp_review_desc_settings" class="<?php echo esc_attr( $hidden ); ?>">
<div class="wp-review-field">
<div class="wp-review-field-label">
<label for="wp_review_desc_title"><?php esc_html_e( 'Description title', 'wp-review' ); ?></label>
<div class="wp-review-field-option">
<input type="text" name="wp_review_desc_title" id="wp_review_desc_title" class="large-text" value="<?php echo esc_attr( $desc_title ); ?>">
<div class="wp-review-field vertical wp-review-description">
<div class="wp-review-field-label">
<label for="wp_review_desc"><?php esc_html_e( 'Description content', 'wp-review' ); ?></label>
<div class="wp-review-field-option">
/* Display wp editor field. */
'toolbar1' => 'bold,italic,underline,bullist,numlist,separator,separator,link,unlink,undo,redo,removeformat',
'media_buttons' => false,
<div class="wpr-flex wpr-flex-wrap border-box">
<div class="wpr-col-1-2 pr-10">
<p class="wp-review-disabled pros-cons-title">
<strong><?php esc_html_e( 'Pros', 'wp-review' ); ?></strong>
<?php wp_review_print_pro_text(); ?>
<span class="wp-review-disabled inline-block has-bg">
/* Display wp editor field. */
'toolbar1' => 'bold,italic,underline,bullist,numlist,separator,separator,link,unlink,undo,redo,removeformat',
'media_buttons' => false,
<div class="wpr-col-1-2 pl-10">
<p class="wp-review-disabled pros-cons-title">
<strong><?php esc_html_e( 'Cons', 'wp-review' ); ?></strong>
<?php wp_review_print_pro_text(); ?>
<span class="wp-review-disabled inline-block has-bg">
/* Display wp editor field. */
'toolbar1' => 'bold,italic,underline,bullist,numlist,separator,separator,link,unlink,undo,redo,removeformat',
'media_buttons' => false,
<div class="wp-review-field">
<div class="wp-review-disabled wp-review-field-label">
<label><?php esc_html_e( 'Hide Description, Pros/Cons & Total Rating', 'wp-review' ); ?></label>
<?php wp_review_print_pro_text(); ?>
<div class="wp-review-field-option">
$form_field->render_switch(
'id' => 'wp_review_hide_desc',
'name' => 'wp_review_hide_desc',
* Maps default link texts and urls.
* @since 5.0.3 Move this function out of `wp_review_render_meta_box_review_links()`
* @param string $text Link text.
* @param string $url Link url.
function wp_review_get_default_links( $text, $url ) {
* Renders review links meta box.
* @param WP_Post $post Post object.
function wp_review_render_meta_box_review_links( $post ) {
wp_nonce_field( basename( __FILE__ ), 'wp-review-links-options-nonce' );
wp_review_switch_to_main();
$options = get_option( 'wp_review_options' );
'wp_review_get_default_links',
empty( $options['default_link_text'] ) ? array() : $options['default_link_text'],
empty( $options['default_link_url'] ) ? array() : $options['default_link_url']
$items = get_post_meta( $post->ID, 'wp_review_links', true );
if ( ! is_array( $items ) ) {
<table id="wp-review-links" class="wp-review-links" width="100%">
<th width="45%"><?php esc_html_e( 'Text', 'wp-review' ); ?></th>
<th width="40%"><?php esc_html_e( 'URL', 'wp-review' ); ?></th>
<?php if ( ! empty( $items ) && ( isset( $items[0] ) && ! empty( $items[0]['text'] ) ) ) : ?>
<?php foreach ( $items as $item ) { ?>
<?php if ( ! empty( $item['text'] ) && ! empty( $item['url'] ) ) : ?>
<span class="dashicons dashicons-menu"></span>
<input type="text" class="widefat" name="wp_review_link_title[]" value="<?php echo esc_attr( $item['text'] ); ?>" />
<input type="text" class="widefat" name="wp_review_link_url[]" value="<?php echo esc_url( $item['url'] ); ?>" />
<td><a class="button remove-row" href="#"><?php esc_html_e( 'Delete', 'wp-review' ); ?></a></td>
<td class="handle"><span class="dashicons dashicons-menu"></span></td>
<td><input type="text" class="widefat" name="wp_review_link_title[]" /></td>
<td><input type="text" class="widefat" name="wp_review_link_url[]" /></td>
<td><a class="button remove-row" href="#"><?php esc_html_e( 'Delete', 'wp-review' ); ?></a></td>
<!-- empty hidden one for jQuery -->
<tr class="empty-row screen-reader-text">
<td class="handle"><span class="dashicons dashicons-menu"></span></td>
<td><input type="text" class="widefat focus-on-add" name="wp_review_link_title[]" /></td>
<td><input type="text" class="widefat" name="wp_review_link_url[]" /></td>
<td><a class="button remove-row" href="#"><?php esc_html_e( 'Delete', 'wp-review' ); ?></a></td>
<a class="add-row button" data-target="#wp-review-links" href="#"><?php esc_html_e( 'Add another', 'wp-review' ); ?></a>
* Renders user review meta box.
* @param WP_Post $post Post object.
function wp_review_render_meta_box_user_review( $post ) {
/* Add an nonce field so we can check for it later. */
wp_nonce_field( basename( __FILE__ ), 'wp-review-userReview-nonce' );
$enabled = wp_review_get_user_rating_setup( $post->ID );
$type = get_post_meta( $post->ID, 'wp_review_user_review_type', true );
$type = wp_review_option( 'review_type', 'none' );
// $available_types = apply_filters( 'wp_review_metabox_user_rating_types', wp_review_get_review_types( 'user' ) );
$available_types = wp_review_get_rating_types();
$product_price = wp_review_get_product_price( $post->ID );
$form_field = new WP_Review_Form_Field();
<div class="wp-review-field no-flex">
<input type="radio" name="wp_review_userReview" id="wp-review-userReview-disable" value="<?php echo esc_attr( WP_REVIEW_REVIEW_DISABLED ); ?>" <?php checked( WP_REVIEW_REVIEW_DISABLED, $enabled ); ?>>
<?php esc_html_e( 'Disabled', 'wp-review' ); ?>
<input type="radio" name="wp_review_userReview" id="wp-review-userReview-visitor" value="<?php echo esc_attr( WP_REVIEW_REVIEW_VISITOR_ONLY ); ?>" <?php checked( WP_REVIEW_REVIEW_VISITOR_ONLY, $enabled ); ?>>
<?php esc_html_e( 'Visitor Rating Only', 'wp-review' ); ?>
<label class="wp-review-disabled">
<input type="radio" name="wp_review_userReview" id="wp-review-userReview-comment" value="<?php echo esc_attr( WP_REVIEW_REVIEW_COMMENT_ONLY ); ?>" <?php checked( WP_REVIEW_REVIEW_COMMENT_ONLY, $enabled ); ?> disabled />
<?php esc_html_e( 'Comment Rating Only', 'wp-review' ); ?>
<?php wp_review_print_pro_text( true ); ?>
<label class="wp-review-disabled">
<input type="radio" name="wp_review_userReview" id="wp-review-userReview-both" value="<?php echo esc_attr( WP_REVIEW_REVIEW_ALLOW_BOTH ); ?>" <?php checked( WP_REVIEW_REVIEW_ALLOW_BOTH, $enabled ); ?> disabled/>
<?php esc_html_e( 'Both', 'wp-review' ); ?>
<?php wp_review_print_pro_text( true ); ?>
<?php $hidden = WP_REVIEW_REVIEW_DISABLED == $enabled ? 'hidden' : ''; ?>
<div class="show-if-both <?php echo esc_attr( $hidden ); ?>">
<div class="edit-ratings-notice update-nag" style="margin-top: 0;"><?php esc_html_e( 'If you are changing User Rating Type & post already have user ratings, please edit or remove existing ratings.', 'wp-review' ); ?></div>
<div class="wp-review-field" id="wp_review_rating_type">
<div class="wp-review-field-label">
<label for="rating_type"><?php esc_html_e( 'User Rating Type', 'wp-review' ); ?></label>
<div class="wp-review-field-option">
<select name="wp_review_user_review_type" id="rating_type">
foreach ( $available_types as $key => $available_type ) {
// Skip ones that only have output template.
if ( ! $available_type['user_rating'] ) {
$disabled = 'circle' === $key || 'thumbs' === $key;
'<option value="%1$s" class="%2$s" %3$s>%4$s</option>',
$disabled ? 'disabled' : '',
selected( $type, $key, false ),
esc_html( $available_type['label'] )
<?php $hidden = WP_REVIEW_REVIEW_DISABLED == $enabled ? 'hidden' : ''; ?>
<div class="show-if-both <?php echo esc_attr( $hidden ); ?>">
<div class="wp-review-field">
<div class="wp-review-field-label">
<label><?php esc_html_e( 'User can:', 'wp-review' ); ?></label>
<?php wp_review_print_pro_text(); ?>
<div class="wp-review-field-option">
<span class="wp-review-disabled inline-block has-bg">
<select name="wp_review_user_can_rate_feature" id="wp_review_user_can_rate_feature" disabled>
<option value=""><?php esc_html_e( 'Give Overall Rating', 'wp-review' ); ?></option>
<option value="1"><?php esc_html_e( 'Rate Each Feature', 'wp-review' ); ?></option>
<?php $hidden = in_array( $enabled, array( WP_REVIEW_REVIEW_DISABLED, WP_REVIEW_REVIEW_COMMENT_ONLY ) ) ? 'hidden' : ''; ?>
<div class="show-if-visitor <?php echo esc_attr( $hidden ); ?>">
<div class="wp-review-field">
<div class="wp-review-field-label">
<label><?php esc_html_e( 'Hide Visitors Rating in Review Box', 'wp-review' ); ?></label>
<?php wp_review_print_pro_text(); ?>
<div class="wp-review-field-option">
$form_field->render_switch(
'id' => 'wp_review_hide_visitors_rating',
'name' => 'wp_review_hide_visitors_rating',
<div class="wp-review-field">
<div class="wp-review-field-label">
<label for="wp_review_product_price"><?php esc_html_e( 'Product Price', 'wp-review' ); ?></label>
<div class="wp-review-field-option">
<input type="text" name="wp_review_product_price" id="wp_review_product_price" value="<?php echo esc_attr( $product_price ); ?>">
<div class="wp-review-field">
<div class="wp-review-disabled wp-review-field-label">
<label for="wp_review_allow_comment_feedback"><?php esc_html_e( 'Comment Feedback (helpful/unhelpful)', 'wp-review' ); ?></label>
<?php wp_review_print_pro_text(); ?>
<div class="wp-review-field-option">
<span class="wp-review-disabled inline-block has-bg">
<select name="wp_review_allow_comment_feedback" id="wp_review_allow_comment_feedback" disabled>
<option value=""><?php esc_html_e( 'Use global options', 'wp-review' ); ?></option>
<option value="yes"><?php esc_html_e( 'Yes', 'wp-review' ); ?></option>
<option value="no"><?php esc_html_e( 'No', 'wp-review' ); ?></option>
if ( current_user_can( 'wp_review_purge_visitor_ratings' ) ) {
<p style="margin-top: 50px;">
data-processing-text="<?php esc_attr_e( 'Processing...', 'wp-review' ); ?>"
data-post-id="<?php echo intval( $post->ID ); ?>"
><?php esc_html_e( 'Purge visitor ratings', 'wp-review' ); ?></button>
<span class="description"><?php esc_html_e( 'Click to remove all visitor ratings of this post.', 'wp-review' ); ?></span>
* @param int $post_id Post ID.
* @param WP_Post $post Post object.
function wp_review_save_postdata( $post_id, $post ) {
/* If this is an autosave, our form has not been submitted, so we don't want to do anything. */
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
if ( ! isset( $_POST['wp-review-review-options-nonce'] ) || ! wp_verify_nonce( $_POST['wp-review-review-options-nonce'], 'wp-review-meta-box-options' ) ) {
$hide_user_reviews = false;
$hide_review_features = false;
$hide_desc = wp_review_network_option( 'hide_review_description_' );
$hide_links = wp_review_network_option( 'hide_review_links_' );
$hide_user_reviews = wp_review_network_option( 'hide_user_reviews_' );
$hide_review_features = wp_review_network_option( 'hide_features_' );
if ( ! $hide_desc && ! current_user_can( 'wp_review_description' ) ) {
if ( ! $hide_links && ! current_user_can( 'wp_review_links' ) ) {
if ( ! $hide_user_reviews && ! current_user_can( 'wp_review_user_reviews' ) ) {
$hide_user_reviews = true;
if ( ! $hide_review_features && ! current_user_can( 'wp_review_features' ) ) {
$hide_review_features = true;
if ( ! $hide_review_features && ( ! isset( $_POST['wp-review-item-nonce'] ) || ! wp_verify_nonce( $_POST['wp-review-item-nonce'], basename( __FILE__ ) ) ) ) {
if ( ! $hide_desc && ( ! isset( $_POST['wp-review-desc-nonce'] ) || ! wp_verify_nonce( $_POST['wp-review-desc-nonce'], basename( __FILE__ ) ) ) ) {
if ( ! $hide_links && ( ! isset( $_POST['wp-review-links-options-nonce'] ) || ! wp_verify_nonce( $_POST['wp-review-links-options-nonce'], basename( __FILE__ ) ) ) ) {
if ( ! $hide_user_reviews && ( ! isset( $_POST['wp-review-userReview-nonce'] ) || ! wp_verify_nonce( $_POST['wp-review-userReview-nonce'], basename( __FILE__ ) ) ) ) {
/* Check the user's permissions. */
if ( isset( $_POST['post_type'] ) && 'page' === $_POST['post_type'] ) {
if ( ! current_user_can( 'edit_page', $post_id ) ) {
if ( ! current_user_can( 'edit_post', $post_id ) ) {
$type = filter_input( INPUT_POST, 'wp_review_type', FILTER_SANITIZE_STRING );
$type = wp_review_option( 'review_type', 'none' );
update_post_meta( $post_id, 'wp_review_type', $type );
// Do not save review data if never enable it.
if ( 'none' === $type && ! get_post_meta( $post_id, 'wp_review_bgcolor1', true ) ) {
'wp_review_custom_location' => filter_input( INPUT_POST, 'wp_review_custom_location', FILTER_SANITIZE_STRING ),
'wp_review_custom_colors' => filter_input( INPUT_POST, 'wp_review_custom_colors', FILTER_SANITIZE_STRING ),
'wp_review_custom_author' => filter_input( INPUT_POST, 'wp_review_custom_author', FILTER_SANITIZE_STRING ),
'wp_review_location' => filter_input( INPUT_POST, 'wp_review_location', FILTER_SANITIZE_STRING ),
'wp_review_heading' => filter_input( INPUT_POST, 'wp_review_heading', FILTER_SANITIZE_STRING ),
'wp_review_desc_title' => filter_input( INPUT_POST, 'wp_review_desc_title', FILTER_SANITIZE_STRING ),
'wp_review_desc' => ! empty( $_POST['wp_review_desc'] ) ? wp_kses_post( wp_unslash( $_POST['wp_review_desc'] ) ) : '',
'wp_review_userReview' => filter_input( INPUT_POST, 'wp_review_userReview', FILTER_SANITIZE_STRING ),