Shortcode rendering as text not as shortcode shoul

2020-04-30 02:40发布

问题:

I am building a shopping website and I am trying to put a shortcode in that will show the customer a buy button and the quantity of the product the customer wants to purchase. On my post page the shortcode works fine:

http://warringah-plastics.com.au/blog/dt_catalog/recess-gasket-large/

but on the archive page:

http://warringah-plastics.com.au/store/

the shortcode id displayed as text and not the actual button and quantity e.g. [add_to_cart item="FPROWAR-160713-1" showprice="no" quantity="user:1" ajax="yes" ].

The code that works in the post page is this:

<?php 
$my_textbox_value = mtbxr_val("shopping_shortcode");
echo do_shortcode("$my_textbox_value"); 
?>

but it just displays the shortcode text on that archive page. Anyone have any ideas? Much appreciated,


UPDATE

THIS IS THE CODE THAT DISPLAYS THE SHORTCODE CORRECTLY:

<?php get_header(); ?>
<?php dt_storage('have_sidebar', true); ?>

    <?php get_template_part('top-bg'); ?>

    <?php get_template_part('parallax'); ?>

    <div id="wrapper">

        <?php get_template_part('nav'); ?>

        <div id="container">

            <?php if( have_posts() ): while( have_posts() ): the_post(); ?>

                <h1><?php the_title(); ?></h1>



<h1 style="color: #3C3C3B !important; margin-top:-20px !important;"><?php $terms_as_text = strip_tags( get_the_term_list( $wp_query->post->ID, 'dt_catalog_category', '', ', ', '' ) );
echo $terms_as_text; ?></h1>


            <?php
            global $post;
            $post_opts = get_post_meta($post->ID, '_dt_catalog-post_options', true);

            if( !isset($post_opts['hide_media']) || (isset($post_opts['hide_media']) && !$post_opts['hide_media']) ) {
                $args = array(
                    'post_type'         => 'attachment',
                    'post_status'       => 'inherit',
                    'posts_per_page'    => -1,
                    'post_parent'       => $post->ID,
                    'post_mime_type'    => 'image',
                    'orderby'           => 'menu_order',
                    'order'             => 'ASC'
                );
                if( !empty($post_opts['hide_thumbnail']) )
                    $args['post__not_in'] = array( get_post_thumbnail_id() );

                $dt_tmp_query = new WP_Query( $args );
                if( $dt_tmp_query->have_posts() ) {
                    $slides = array();
                    foreach( $dt_tmp_query->posts as $slide ) {
                        $video = get_post_meta( $slide->ID, '_dt_catalog_video_link', true );
                        $tmp_arr = array();

                        $tmp_arr['caption'] = $slide->post_excerpt;
                        if ( ! $video ) {
                            $slide_src = dt_get_resized_img( wp_get_attachment_image_src( $slide->ID, 'full' ), array( 'w' => 710 ) );
                            $tmp_arr['alt'] = get_post_meta( $slide->ID, '_wp_attachment_image_alt', true );
                            $tmp_arr['src'] = $slide_src[0];
                            $tmp_arr['size_str'] = $slide_src[3];
                        } else {
                            $tmp_arr['is_video'] = true; 
                            $tmp_arr['src'] = $video; 
                            $tmp_arr['size_str'] = array( 710, 1024 );
                        }
                        $slides[] = $tmp_arr;
                    }
                    dt_get_anything_slider( array( 'id' => 'slider2', 'items_arr' => $slides ) );
                }
            }
            ?>

                <?php $opts = get_post_meta($post->ID, '_dt_catalog-goods_options', true); ?>

                <?php if( !empty($opts['price']) ): ?>

                <span class="price"><?php _e('Price: ', LANGUAGE_ZONE); echo esc_html($opts['price']); ?></span>

                <?php endif; ?>





                        <?php 
                $my_textbox_value = mtbxr_val("shopping_shortcode");

                echo do_shortcode("$my_textbox_value"); 

                ?>



                <?php
                the_content();

                if( dt_is_page_soc_buttons_enabled('catalog') ) {
                    dt_get_like_buttons( get_the_ID() );
                }
                ?>

                <?php if( !empty($opts['p_link']) ): ?>

                    <a href="<?php echo esc_url($opts['p_link']); ?>" class="button" title=""><span><i class="dol"></i><?php _e('Make purchase!', LANGUAGE_ZONE); ?></span></a>

                <?php endif; ?>

                <p class="gap"></p>
                <?php
                $rel_works = get_post_meta($post->ID, '_dt_catalog_related', true);
                if( isset($rel_works['show_related']) && $rel_works['show_related'] ):
                    if( 'same' == $rel_works['related'] ) {
                        $rel_works['related'] = wp_get_post_terms(
                            $post->ID,
                            'dt_catalog_category',
                            array('fields' => 'ids')
                        );
                    }
                    if( !empty($rel_works['related']) ):
                ?>

                <p class="hr hr-narrow gap-small"></p>

                <div class="gap"></div>
                <div class="full-width w-photo">
                    <h2><?php _e('Related Items', LANGUAGE_ZONE); ?></h2>

                    <?php
                    if( 'same' == $rel_works['related'] ) {
                        $rel_works['related'] = wp_get_post_terms(
                            $post->ID,
                            'dt_catalog_category',
                            array('fields' => 'ids')
                        );
                    }
                    $dt_tmp_query = new WP_Query( array(
                        'posts_per_page'    => -1,
                        'post_type'         => 'dt_catalog',
                        'post_status'       => 'publish',
                        'post__not_in'      => array($post->ID),
                        'tax_query'         => array( array(
                            'taxonomy'  => 'dt_catalog_category',
                            'field'     => 'id',
                            'terms'     =>  $rel_works['related'],
                            'operator'  => 'IN'
                        ) )    
                    ) );
                    if( $dt_tmp_query->have_posts() ) {
                        $thumb_arr = dt_core_get_posts_thumbnails( $dt_tmp_query->posts );
                        $items = array();
                        foreach( $dt_tmp_query->posts as $rel_post ) {
                            $item = array();
                            $img = dt_get_resized_img(
                                dt_get_thumb_meta($thumb_arr['thumbs_meta'], 'full', $rel_post->ID),
                                array('w' => 196, 'h' => 123, 'use_noimage' => true)
                            );
                            $item['src'] = $img[0];
                            $item['size_str'] = $img[2];
                            $item['post_id'] = $rel_post->ID;

                            $item['desc'] = apply_filters('get_the_excerpt', $rel_post->post_excerpt);
                            $item['title'] = apply_filters('the_title', $rel_post->post_title, $rel_post->ID);
                            $item['alt'] = esc_attr( $item['title'] );

                            $items[] = $item;
                        }

                        $args = array( 'items_arr' => $items, 'id' => '', 'class' => 'list-carousel recent bx', 'ul_class' => 'slider1' );
                        $args['wrap'] = '<div class="%CLASS% bx">%SLIDER%</div>';

                        if( ! empty( $rel_works['show_desc'] ) || ! empty( $rel_works['show_title'] ) ) {

                            $title = '';
                            if( ! empty( $rel_works['show_title'] ) ) {
                                $title = '<h3><a href="%LINK%" class="head">%TITLE%</a></h3>';
                            }

                            $desc = '';
                            if( ! empty( $rel_works['show_desc'] ) ) {
                                $desc = '<p>%DESC%</p>';
                            }

                            $args['item_wrap'] = '
                            <li>
                                <div class="textwidget">
                                    <div class="textwidget-photo">
                                        <a class="photo" href="%LINK%"><img src="%IMG_SRC%" alt="%ALT%" %IMG_SIZE% /></a>
                                    </div>
                                    <div class="widget-info">
                                        <div class="info">
                                            ' . $title . $desc . '
                                        </div>
                                </div>
                                </div>
                            </li>
                            ';

                        }
                        dt_get_carousel_slider( $args );
                    }
                    ?>






                </div>

                <?php endif; endif; ?>

                <?php comments_template(); ?>

            <?php
                endwhile;
            endif;
            ?>

        </div>







<?php dt_widget_area('sidebar', null, 'sidebar_4'); ?>



    </div>

<?php get_footer(); ?>

AND THIS IS THE CODE THAT DISPLAYS THE SHORTCODE JUST AS TEXT:

<?php
global $post;
$page_data = dt_storage( 'page_data' );
$page_opts = ! empty( $page_data['page_options'] ) ? $page_data['page_options'] : array();
$add_data = dt_storage( 'add_data' );

$first_class = '';
if( 1 === dt_storage('post_is_first') ) {
    $first_class = ' first';
    dt_storage( 'post_is_first', -1 );
}

$opts = get_post_meta($post->ID, '_dt_catalog-goods_options', true);
?>
<div class="<?php dt_portfolio_classes( '2_col-list', 'block' ); echo $first_class; ?>">

        <?php
        $h = 220;
        if ( ! empty ( $page_opts['thumb_height'] ) ) {
            $h = $page_opts['thumb_height'];
        }
        dt_get_thumb_img( array(
            'class'         => 'photo',
            'use_noimage'   => true,
            'href'          => get_permalink(),
            'thumb_opts'    => array( 'w' => 343, 'h' => $h )
            ),
            '<div class="textwidget-photo">
                <a %HREF% %CLASS% %TITLE% %CUSTOM%><img %ALT% %SRC% %IMG_CLASS% %SIZE% /></a>
            </div>'
        );
        ?>

    <div class="<?php dt_portfolio_classes( '2_col-list', 'info' ); ?>">
        <a class="<?php dt_portfolio_classes( '2_col-list', 'head' ); ?>" href="<?php the_permalink(); ?>"><?php the_title(); ?></a>

        <?php if( !empty($opts['price']) ): ?>

        <span class="price"><?php _e('Price: ', LANGUAGE_ZONE); echo esc_html($opts['price']); ?></span>




        <?php endif; ?>

        <?php
        dt_the_content();
        dt_details_link();
        dt_edit_link();

        ?>



        <div id="specialpriceshortcode">

        <?php 
                $my_textbox_value = mtbxr_val("shopping_shortcode");

                echo do_shortcode("$my_textbox_value"); 

                ?>




    </div>  

    </div>



</div>

回答1:

Try using single quotes in the do_shortcode call, like so:

 echo do_shortcode('$my_textbox_value');

More likely though is that the shortcode isn't defined on the archive page so you'd need to look at where it is being instantiated to see if that is the issue. Normally when a shortcode just echoes out the content it means that shortcode doesn't exist. You can test easily enough by using the shortcode_exists() function:

<?php if ( shortcode_exists( 'add_to_cart' ) ) { echo "The shortcode exists";} ?> 

If that doesn't work then you know the issue is with the shortcode not being registered on your archives page. If it does work then you know it's something with the format of the content being passed to the shortcode.



回答2:

Add this to your functions.php

// Allow shortcodes on widgets
add_filter('widget_text','do_shortcode');

// Allow shortcodes on pages (not tested, but should work)
add_filter('the_content','do_shortcode');


回答3:

Typically your shortcode is getting registered in a plugin or your theme's functions.php file. In a plugin it's often something like:

add_action('init', 'register_my_shortcode');

function register_my_shortcode(){
  add_shortcode('my_shortcode', 'do_my_shortcode');
}

And then you'd have a function do_my_short_code() that actually outputs the content. With something like that the shortcode is getting registered via the 'init' hook (http://codex.wordpress.org/Plugin_API/Action_Reference) which is called before WP has started figuring out what template to use, what content to output, etc.

But some plugins will register the shortcode in a way that it is only available on pages / posts where it's going to potentially be used. For example, I can think of one plugin where they register the shortcode and enqueue some javascripts in the same function. That function checks to see if you're on a particular page before it executes so that the js files are not included unnecessarily all over the place. Since the shortcode registration takes place in the same function it means the shortcode only exists on those pages.

Anyhow, if the shortcode is showing as existing on your archives page you know that isn't the problem, so check that first and let me know what you find.



标签: wordpress