WordPress - 如何在PHP文件中使用短代码

时间:2015-08-28 14:17:38

标签: php wordpress shortcode

在挖掘代码两天后,我已经尝试了几乎所有我知道的事情......我已经到了我要么踢项目并埋葬它还是有人可以点燃火灾并帮助我

我使用WooCommerce插件设置了Wordpress,产品被淘汰了......直到那里都很好。 我想要添加的是访问者能够提升产品的可能性。所以我正在寻找一个插件并找到一个。 但那是实际问题!名为“Like-Photo”的插件为我提供了wordpress短代码功能。如果我在wordpress编辑器中插入短代码(在图像之前和之后),一切正常。 但我需要将该代码放在php文件(循环产品的那个)本身。 所以我尝试使用php echo函数作为短代码,如下所示。它根本不起作用。当我在浏览器中打开检查器工具时,我只看到第二个短代码部分在文本中呈现出来并且应该创建一个div(当我在wordpress post编辑器中粘贴短代码时它会做什么)。

任何人都可以帮我吗?我在精神上完成了: - (

如果有人愿意为我提供一些帮助,那么就提前了!

是的,我不是php的专家,所以请你好。

 <?php echo do_shortcode('[add_voting]'); ?> <!-- shortcode beginning-->

    <?php do_action( 'woocommerce_before_shop_loop_item' ); ?> <!-- The loop for the items-->
    <div class="image-box"> 
        <div class="voteup_layer">
                <div class="voteup_layer_triangle">
                    <div class="voteup_layer_triangle-inner"></div>
                </div>
                <p>CLICK 2 UPVOTE</p>
        </div>
        <div class="sb_title"><?php the_title(); ?></div>
        <div class="arrow-up"></div>
        <div id="num-id" class="count-num">20.453</div>


        <a href="<?php the_permalink(); ?>">
            <?php
                /**
                 * woocommerce_before_shop_loop_item_title hook
                 *
                 * @hooked woocommerce_show_product_loop_sale_flash - 10
                 * @hooked woocommerce_template_loop_product_thumbnail - 10
                 */
                do_action( 'woocommerce_before_shop_loop_item_title' );
                if ( has_post_thumbnail() ) {
                    //echo get_the_post_thumbnail( get_the_ID(), array(370,370) );          
                    echo get_the_post_thumbnail( get_the_ID(), 'home-small-box' );          

                }
            ?>
        </a>        
    </div>
    <?php echo do_shortcode('[/add_voting]'); ?> <!-- shortcode end-->

我收到了这个html输出:

<div class="home_small_box ">
    <div class="image-box">
        <div class="voteup_layer">
            <div class="voteup_layer_triangle">
                <div class="voteup_layer_triangle-inner"></div>
            </div>
            <p>CLICK 2 UPVOTE</p>
        </div>
        <div class="sb_title">FOSSIL <br> <span class="thin">Moon Explorer</span></div>
        <div class="arrow-up"></div>
        <div id="num-id" class="count-num">20.453</div>
        <a href="http://online.com/product/fossil-moon-explorer/">
        <img width="360" height="360" src="http://online.com/wp-content/uploads/2015/08/shopping-1-360x360.jpg" class="attachment-home-small-box wp-post-image" alt="shopping-1">           
         </a>       
    </div>
    "[/add_voting]"     

并且想要(这是我在wordpress编辑器中添加短代码后呈现HTML的方式 - 它在图像周围创建了一个名为“like-photo-wrapper”的div,我放置了短代码并添加了投票功能) :

<div class="like-photo-wrapper">
  <a href="http://online.com/wp...2.jpg">
    <img src="http://online.com/wp...300.jpg" alt="shopping-2" >
  </a>
 <div class="votes"><span class="currentVotes">Votes:  0</span>
 <a href="http://online.com" title="vote on this image">vote on this image</a>     
 </div>
</div> 

短信在我的php中无法正常工作。

1 个答案:

答案 0 :(得分:2)

查看do_shortcode的文档。

它的要点是,对包含内容的短代码调用do_shortcode应该是这样的

// In case there is opening and closing shortcode.
echo do_shortcode( '[iscorrect]' . $text_to_be_wrapped_in_shortcode . '[/iscorrect]' );

您可以尝试使用输出缓冲捕获输出并将其传递到短代码中。

ob_start();

<?php do_action( 'woocommerce_before_shop_loop_item' ); ?> <!-- The loop for the items-->
<div class="image-box"> 
    <div class="voteup_layer">
            <div class="voteup_layer_triangle">
                <div class="voteup_layer_triangle-inner"></div>
            </div>
            <p>CLICK 2 UPVOTE</p>
    </div>
    <div class="sb_title"><?php the_title(); ?></div>
    <div class="arrow-up"></div>
    <div id="num-id" class="count-num">20.453</div>


    <a href="<?php the_permalink(); ?>">
        <?php
            /**
             * woocommerce_before_shop_loop_item_title hook
             *
             * @hooked woocommerce_show_product_loop_sale_flash - 10
             * @hooked woocommerce_template_loop_product_thumbnail - 10
             */
            do_action( 'woocommerce_before_shop_loop_item_title' );
            if ( has_post_thumbnail() ) {
                //echo get_the_post_thumbnail( get_the_ID(), array(370,370) );          
                echo get_the_post_thumbnail( get_the_ID(), 'home-small-box' );          

            }
        ?>
    </a>        
</div>
$out = ob_get_clean();
<?php echo do_shortcode('[add_voting] ' . $out . '[/add_voting]'); ?> <!-- shortcode end-->