Woocommerce 如何将钩子中的函数触发转换为简码

Woocommerce how to convert a function fires in a hook to a shortcode

我使用 functions.php:

将自定义字段添加到 WooCommerce 单个产品页面
add_action( 'woocommerce_after_single_product_summary', 'auction_information_field', 4 );

但是,我在使用 Divi Builder 时遇到了方块位置问题。

因为当divi builder被激活时,它被放置在Divi builder区域之前的外面。但是当我使用默认的标准编辑器时工作正常。

所以我有兴趣通过将字段的 add_action 函数转换为简码来解决这个问题。所以短代码可以留在 functions.php 中,我可以将短代码放在 divi 构建器模块中以将其放在正确的位置。

虽然我不确定如何转换成简码。

如有任何建议,我们将不胜感激。

            <div class="et_pb_row property_page_row">
            <div class="property-content">
                <h2>Auction Details</h2>
                <div class="property-overview">
                    <ul>
                        <li>
                            Auction Status
                            <strong><?php
                                $type = $product->get_auction_status();
                                switch ( $type ) {
                                    case 'non-started':
                                        echo esc_attr__( 'Not Started', 'yith-auctions-for-woocommerce' );
                                        break;
                                    case 'started':
                                        echo esc_attr__( 'Started', 'yith-auctions-for-woocommerce' );
                                        break;
                                    case 'finished':
                                        echo esc_attr__( 'Finished', 'yith-auctions-for-woocommerce' ) ;
                                        break;
                                }
                                ?>
                            </strong>
                        </li>
                        <li>
                            Auction Type <strong><?php echo $product->get_auction_type(); ?></strong>
                        </li>
                        <li>
                            Auction Start Date
                            <strong><?php
                                $dateinic = $product->get_start_date();
                                if ( $dateinic ) {
                                
                                    $format_date = get_option( 'yith_wcact_general_date_format', 'j/n/Y' );
                                    $format_time = get_option( 'yith_wcact_general_time_format', 'h:i:s' );
                                
                                    $format = $format_date . ' ' . $format_time;
                                
                                    $date = get_date_from_gmt( date( 'Y-m-d H:i:s', $dateinic ), $format );
                                    echo $date;
                                }
                                ?>
                            </strong>
                        </li>
                        <li>
                            Auction End Date
                            <strong><?php
                                $dateclose = $product->get_end_date();
                                
                                if ( $dateclose ) {
                                
                                    $format_date = get_option( 'yith_wcact_general_date_format', 'j/n/Y' );
                                    $format_time = get_option( 'yith_wcact_general_time_format', 'h:i:s' );
                                    
                                    $format = $format_date . ' ' . $format_time;
                                    
                                    $date = get_date_from_gmt( date( 'Y-m-d H:i:s', $dateclose ), $format );
                                    echo $date;
                                }
                                
                                ?>
                            </strong>
                        </li>
                    </ul>
                </div>
            </div>
        </div>
    <?php
    }

如 WordPress 简码 API 中的解释:https://codex.wordpress.org/Shortcode_API

如果短代码产生很多 HTML 那么 ob_start 可以用来捕获输出并将其转换为字符串,如下所示:-

function my_shortcode() {
    ob_start();
    // Here you can put your additional HTML or PHP code.
    ?> <HTML> <here> ... <?php
    return ob_get_clean();
}
add_shortcode('my-shortcode', 'my_shortcode');

如果您不使用输出缓冲,则代码通常会出现在页面内容之前。

您可以使用 add_shortcode。你可以像 [auction_information_field] 这样使用。试试下面的代码。

function auction_information_field_callback() {

    if( is_singular( 'product' ) ){

        global $product;

        ob_start();

        if ( 'auction' === $product->get_type() ) { ?>
            <div class="et_pb_row property_page_row">
                <div class="property-content">
                    <h2>Auction Details</h2>
                    <div class="property-overview">
                        <ul>
                            <li>
                                Auction Status
                                <strong><?php
                                    $type = $product->get_auction_status();
                                    switch ( $type ) {
                                        case 'non-started':
                                            echo esc_attr__( 'Not Started', 'yith-auctions-for-woocommerce' );
                                            break;
                                        case 'started':
                                            echo esc_attr__( 'Started', 'yith-auctions-for-woocommerce' );
                                            break;
                                        case 'finished':
                                            echo esc_attr__( 'Finished', 'yith-auctions-for-woocommerce' ) ;
                                            break;
                                    }
                                    ?>
                                </strong>
                            </li>
                            <li>
                                Auction Type <strong><?php echo $product->get_auction_type(); ?></strong>
                            </li>
                            <li>
                                Auction Start Date
                                <strong><?php
                                    $dateinic = $product->get_start_date();
                                    if ( $dateinic ) {
                                    
                                        $format_date = get_option( 'yith_wcact_general_date_format', 'j/n/Y' );
                                        $format_time = get_option( 'yith_wcact_general_time_format', 'h:i:s' );
                                    
                                        $format = $format_date . ' ' . $format_time;
                                    
                                        $date = get_date_from_gmt( date( 'Y-m-d H:i:s', $dateinic ), $format );
                                        echo $date;
                                    }
                                    ?>
                                </strong>
                            </li>
                            <li>
                                Auction End Date
                                <strong><?php
                                    $dateclose = $product->get_end_date();
                                    
                                    if ( $dateclose ) {
                                    
                                        $format_date = get_option( 'yith_wcact_general_date_format', 'j/n/Y' );
                                        $format_time = get_option( 'yith_wcact_general_time_format', 'h:i:s' );
                                        
                                        $format = $format_date . ' ' . $format_time;
                                        
                                        $date = get_date_from_gmt( date( 'Y-m-d H:i:s', $dateclose ), $format );
                                        echo $date;
                                    }
                                    
                                    ?>
                                </strong>
                            </li>
                        </ul>
                    </div>
                </div>
            </div>
        <?php
        }

        $html = ob_get_clean();
        return $html;

    }   
        
}

add_shortcode( 'auction_information_field', 'auction_information_field_callback' );