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' );
我使用 functions.php
:
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' );