wpautop is not working when displaying content saved using wp_editor in a custom meta box

I am using wp_editor in a custom meta box. It is saving the content to the post metadata. And displaying it in the meta box as it should.

The problem is when I am trying to display this content on the public-facing side of the website. It is displaying without the paragraphs. All other HTML that are part of the wp_editor content is displaying as they should.

My meta box code is as follows:

public static function as_bllp_create_call_to_action_meta_box( $post ){

        /* Retrieve call to action content from post meta */
        $as_bllp_call_to_action_para = get_post_meta( $post-ID, '_as_bllp_call_to_action_para', true );

        //The call to action section is going to be an HTML editor

        $settings = array(
            'textarea_name' = 'as_bllp_call_to_action_para',
            'textarea_rows' = 10,
            'media_buttons' = false,
            'wpautop' = false
        );

        echo 'div class="call-to-action-para"';
            wp_editor(htmlspecialchars_decode( $as_bllp_call_to_action_para ), 'as_bllp_call_to_action_editor1', $settings);
        echo '/div';
    }

Saving the wp_editor data with the following code:

 /* Building args for allowed html for the content area filtering */
        $allowed_html_tags = array(
            'a' = array(
                'href' = array(),
                'title' = array(),
                'rel' = array(),
                'target' = array()
            ),
            'br' = array(),
            'p' = array(),
            'em' = array(),
            'strong' = array(),
            'h1' = array(),
            'h2' = array(),
            'h3' = array(),
            'h4' = array(),
            'h5' = array(),
            'ul' = array(),
            'ol' = array(),
            'li' = array()
        );

if ( !empty( $_POST[ 'as_bllp_call_to_action_para' ] ) ){

            /* Stripping received content of all HTML tags except for allowed tags */
            $html_content = wp_kses( $_POST[ 'as_bllp_call_to_action_para' ], $allowed_html_tags );

            /* Converting HTML to preserve their meaning */
            $as_bllp_call_to_action_para = htmlspecialchars( $html_content );

            /* Save the call to action content in post meta */
            update_post_meta( $post_id, '_as_bllp_call_to_action_para', $as_bllp_call_to_action_para );

        }

The above part works just fine. It saves and displays the content in the metabox as it should. With proper formatting.

But it doesn't add the paragraphs back when I display it on the custom post type single template on the front end of the site. Using this code:


/* Retrieve call to action content from post meta */
   $as_bllp_call_to_action_para = get_post_meta( $post_id, '_as_bllp_call_to_action_para', true );

/* echo the content for display */
   echo htmlspecialchars_decode( wp_kses( $as_bllp_call_to_action_para, $obj1-allowed_html_tags ) );

$obj1->allowed_html_tags is the same as above.

I thought 'wpautop' => false argument should tell WordPress that I want to preserve the paragraphs. As indicated here: https://codex.wordpress.org/Function_Reference/wp_editor

Any ideas what I need to do differently to get the paragraphs formatting the same as entered in the meta box?

Topic wp-editor wp-autop Wordpress

Category Web

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.