短代码渲染为文本而不是短代码应该

时间:2013-07-17 02:27:35

标签: wordpress

我正在建立一个购物网站,我正在尝试设置一个短代码,向客户显示购买按钮和客户想要购买的产品数量。在我的帖子页面上,短代码工作正常:

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

但在存档页面上:

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

短代码ID显示为文本而不是实际按钮和数量,例如[add_to_cart item =“FPROWAR-160713-1”showprice =“no”quantity =“user:1”ajax =“yes”]。

在帖子页面中使用的代码是:

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

但它只显示该存档页面上的短代码文本。有人有主意吗?非常感谢,


更新

这是显示短消息的正确代码:

<?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(); ?>

这就是显示短文本只是文字的代码:

<?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>

3 个答案:

答案 0 :(得分:1)

尝试在do_shortcode调用中使用单引号,如下所示:

 echo do_shortcode('$my_textbox_value');

更有可能的是,在存档页面上没有定义短代码,因此您需要查看它实例化的位置以查看是否存在问题。通常,当短代码只是回显内容时,意味着短代码不存在。您可以使用shortcode_exists()函数轻松测试:

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

如果这不起作用,那么您就知道问题在于您的档案页面上没有注册短代码。如果它确实有效,那么你就知道它的内容格式是传递给短代码的。

答案 1 :(得分:1)

将此添加到您的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');

答案 2 :(得分:0)

通常,您的短代码会在插件或主题的functions.php文件中注册。在插件中,它通常类似于:

add_action('init', 'register_my_shortcode');

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

然后你会有一个实际输出内容的函数do_my_short_code()。有了类似的东西,短代码通过'init'钩子(http://codex.wordpress.org/Plugin_API/Action_Reference)进行注册,在WP开始计算出要使用的模板,要输出的内容等之前调用它。

但是有些插件会以一种只能在可能被使用的页面/帖子上使用的方式注册短代码。例如,我可以想到一个插件,它们注册短代码并在同一个函数中排列一些javascripts。该函数在执行之前检查您是否在特定页面上,以便不会在整个地方不必要地包含js文件。由于短代码注册发生在同一个函数中,这意味着短代码只存在于那些页面上。

无论如何,如果您的档案页面上显示的短代码已经存在,那么您知道这不是问题所在,请先检查一下,然后让我知道您找到的内容。