Woocommerce如何将钩子中的函数转换为短代码



我有自定义字段添加到WooCommerce单一产品页面使用functions.php:

add_action( 'woocommerce_after_single_product_summary', 'auction_information_field', 4 );

但是,我在使用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
}

您可以使用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' );

在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');

如果不使用输出缓冲,那么代码通常会在页面内容之前显示。

相关内容

  • 没有找到相关文章

最新更新