0

I have created a custom comment system, when people enter in video shortcodes it doesn't display the video but just echo's out the shortcode.

I understand the do_shortcode(); command but the comments can contain comments as well as shortcodes.

Is there a best practice around having the shortscodes work?

Thanks

-Chalkie

edit this is my function:

function display_match_comments() {
    global $current_user; wp_get_current_user();
    global $match_id;
    global $wpdb;
    global $comment_success; 
    echo '<div class="latest_results" style="background:#ffffff; text-align:left !important;"">';
    echo '<h6 style="text-align:center !important;">User Comments and Pictures';
    if ( is_user_logged_in() ) {
        echo ' <a href="#add_comment">Add Comment</a>';
    }
    echo '</h6>';
    $content_size = 'one_half';
    $table_name = 'wp_match_comments';
    $row2 = $wpdb->get_results( "SELECT * FROM $table_name WHERE comment_gameid = $match_id AND comment_moderation = '1'");
    if(!$row2) { echo 'No Comments Found</span>'; }
    foreach($row2 as $row2) { 
            if(!$content_size){ $content_size = "one_half"; }
            echo '<div class="'.$content_size.'">';
            echo '<div class="latest_results" style="background:#ffffff;">';
            echo '<h6><a href="https://www.husupporters.club/forums/users/'.$row2->comment_name.'">'.$row2->comment_name.'</a></h6>';
            $comment_content = stripslashes_deep($row2->comment_content);
echo '<span>'.$comment_content.'<br>';
            $react_id = $row2->id. '_' .$match_id;
            echo do_shortcode('[reactions id="'.$react_id.'"]');
            echo '</span><br>';
            $text_to_be_wrapped_in_shortcode = '<span><a href="https://www.husupporters.club/wp-admin/admin.php?page=match_comments&id='.$row2->id.'" class="gamedetail">Manage Comment</a></span>';
            echo do_shortcode( '[UAS_role roles="administrator, moderator"]' . $text_to_be_wrapped_in_shortcode . '[/UAS_role]' );
            echo '</div>';
            echo '</div>';
            if ($content_size == "one_half") { $content_size = "one_half last_column"; goto skip2; }else{ $content_size = "one_half"; goto skip2; }
            skip2:
        }
    echo '<div id="add_comment" class="latest_results" style="background:#ffffff; text-align:left !important;"">';
    if ( is_user_logged_in() ) {
        echo '<h6 style="text-align:center !important;">Add your own comment and 
pictures below</h6>';
    if(get_query_var( 'success' ) != 'yes') { 
     ?>
<form method="POST"  action="<?php the_permalink(); echo $match_id; ?>?success=yes">
    <?php wp_editor($comment_content,"comment_content", array('textarea_rows'=>12, 'editor_class'=>'comment_content_class')); ?>
    <input type="hidden" name="comment_name" value="<?php echo $current_user->user_login; ?>"/>
    <input type="hidden" name="comment_gameid" value="<?php echo $match_id; ?>"/>
    <input type="submit" name="submitComment" value="submit" />
    </form>
<?php
    }
$default_comment = array(
            'comment_name' => '',
            'comment_content' => '',
            'comment_moderation' => '0',
            'comment_gameid' => '',
        );
$item = shortcode_atts( $default_comment, $_REQUEST );
if($_POST['submitComment']) { 
       $wpdb->prepare($wpdb->insert( $table_name, $item ));
}
if(get_query_var( 'success' ) == 'yes') { echo '<span>Your comment has been sent for approval</span><br>'; }
}else{
    echo '<h6 style="text-align:center !important;"> you must be <a href="https://www.husupporters.club/login-register/">logged in</a> 
    to comment</h6>';
}
    echo '</div>';
    echo '</div>';
}

This is the part that displays the comment

$comment_content = stripslashes_deep($row2->comment_content);
echo '<span>'.$comment_content.'<br>';

Within that someone could use the [video] shortcode but it displays the shortcode text not a video.

3
  • Include the code, maybe someone will be able to help if they can see what's actually happening. – Tony Djukic Jan 3 at 18:17
  • We can't help you without checking your code so add the code here. – Ravinder Kumar Jan 3 at 18:22
  • Edited my question – Chalkie Jan 3 at 18:29
2

If some of your comments will contain shortcodes and some won't, there's no harm in running them all through do_shortcode(). If the content has no shortcodes in it, it will simply be returned, and if it does contain shortcodes, they'll be parsed and the content returned.

So you should be able to change

echo '<span>'.$comment_content.'<br>';

to

echo do_shortcode( '<span>'.$comment_content.'<br>' );
1
  • Thank you very much, I did not realise you can have non shortcode data within the do_shortcode function. 1000 kudos to you good sir! – Chalkie Jan 4 at 9:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.