Php 在简单和可变产品的特定html结构中显示一些数据

Php 在简单和可变产品的特定html结构中显示一些数据,php,html,wordpress,woocommerce,product,Php,Html,Wordpress,Woocommerce,Product,在WooCommerce中,我想创建一个函数,为每个变量或变量产品输出一个简单的数据“列表”。或者,如果是一个简单的产品,那么该产品本身的细节。我需要为每个项目提供的详细信息包括:常规价格,尺寸属性(用于变体)销售价格,库存 这是针对WooCommerce产品页面的“目录”版本,因此不会有实际的“添加到购物车”按钮或变体下拉列表。相反,我想向用户展示每个产品/变体的信息 我需要输出每个的数据,作为中的列表项。每个变体都有一个新的 具有3种变体的产品示例: <div class="fs-pr

在WooCommerce中,我想创建一个函数,为每个变量或变量产品输出一个简单的数据“列表”。或者,如果是一个简单的产品,那么该产品本身的细节。我需要为每个项目提供的详细信息包括:
常规价格
尺寸属性
(用于变体)
销售价格
库存

这是针对WooCommerce产品页面的“目录”版本,因此不会有实际的“添加到购物车”按钮或变体下拉列表。相反,我想向用户展示每个产品/变体的信息

我需要输出每个的数据,作为
中的列表项。每个变体都有一个新的

具有3种变体的产品示例:

<div class="fs-product-data-wrapper">
  <ul>
    <li class="fs-data-price">$49.98 ea.</li>
    <li class="fs-data-size">Size: 15-18"</li>
    <li class="fs-data-sale">$49.98 ea. Preferred Customer Price</li>
    <li class="fs-data-stock">Quantity in Stock: 40</li>
  </ul>
  <ul>
    <li class="fs-data-price">$799.98 ea.</li>
    <li class="fs-data-size">Size: 2-2.5'</li>
    <li class="fs-data-sale">$67.98 ea. Preferred Customer Price</li>
    <li class="fs-data-stock">Quantity in Stock: 15</li>
  </ul>
  <ul>
    <li class="fs-data-price">$29.98 ea.</li>
    <li class="fs-data-size">Size: 12"</li>
    <li class="fs-data-sale">$19.98 ea. Preferred Customer Price</li>
    <li class="fs-data-stock">Quantity in Stock: 0</li>
  </ul>
</div>

  • 每套49.98美元
  • 大小:15-18
  • 每套49.98美元。首选客户价格
  • 库存数量:40
  • 每套799.98美元
  • 大小:2-2.5
  • 每套67.98美元。首选客户价格
  • 库存数量:15
  • 每套29.98美元
  • 大小:12“
  • 每套19.98美元。首选客户价格
  • 库存数量:0
没有变化但只是简单产品的示例:

<div class="fs-product-data-wrapper">
  <ul>
    <li class="fs-data-price">$99.98 ea.</li>
    <li class="fs-data-size">Size: 15-18"</li>
    <li class="fs-data-sale">$99.98 ea. Preferred Customer Price</li>
    <li class="fs-data-stock">Quantity in Stock: 32</li>
  </ul>
</div>

  • 每套99.98美元
  • 大小:15-18
  • 每套99.98美元。首选客户价格
  • 库存数量:32
示例的屏幕截图:

<div class="fs-product-data-wrapper">
  <ul>
    <li class="fs-data-price">$49.98 ea.</li>
    <li class="fs-data-size">Size: 15-18"</li>
    <li class="fs-data-sale">$49.98 ea. Preferred Customer Price</li>
    <li class="fs-data-stock">Quantity in Stock: 40</li>
  </ul>
  <ul>
    <li class="fs-data-price">$799.98 ea.</li>
    <li class="fs-data-size">Size: 2-2.5'</li>
    <li class="fs-data-sale">$67.98 ea. Preferred Customer Price</li>
    <li class="fs-data-stock">Quantity in Stock: 15</li>
  </ul>
  <ul>
    <li class="fs-data-price">$29.98 ea.</li>
    <li class="fs-data-size">Size: 12"</li>
    <li class="fs-data-sale">$19.98 ea. Preferred Customer Price</li>
    <li class="fs-data-stock">Quantity in Stock: 0</li>
  </ul>
</div>


我可以管理它的CSS。我只需要能够在
ul
中为每个“选项生成此数据“。理想情况下,这也可以通过短代码完成,因为我将通过页面生成器模板填充它。但如果它挂接到现有的产品页面钩子上,我就可以按时完成。也许在单个产品之后,这里有一种方法可以显示简单和可变产品的特定格式化产品数据:

// Utility funtion: getting and formtting product data
function format_product_data_output( $the_id ){
    $empty =  __( '<em>(empty)</em>', 'woocommerce' );

    // Get an instance of the WC_Product_Variation object
    $product = wc_get_product( $the_id );

    // Only wc_get_price_to_display() respect if product is to be displayed with or without including taxes
    $price = wc_price( wc_get_price_to_display( $product, array( 'price' => $product->get_regular_price() ) ) );
    $sale_price = wc_get_price_to_display( $product, array( 'price' => $product->get_sale_price() ) );
    $sale_price = ! empty( $sale_price ) ? wc_price($sale_price) : $empty;

    $size = $product->get_attribute( 'pa_size' );
    $size = ! empty( $size ) ? get_term_by( 'slug', $size, 'pa_size' )->name : $empty;

    $stock_qty = $product->get_stock_quantity();
    $stock_qty = ! empty( $stock_qty ) ? $stock_qty : $empty;

    $output = '
    <ul>
        <li class="fs-data-price">'.$price.'</li>
        <li class="fs-data-size">Size: '.$size.'</li>
        <li class="fs-data-sale">'.$sale_price.' Preferred Customer Price</li>
        <li class="fs-data-stock">Quantity in Stock: '.$stock_qty.'</li>
    </ul>';

    return $output;
}

//
add_action( 'woocommerce_after_single_product', 'custom_table_after_single_product' );
function custom_table_after_single_product(){
    global $product;

    $output = '<div class="fs-product-data-wrapper">';

    // Variable products
    if( $product->is_type('variable'))
    {
        // Get available variations in the variable product
        $available_variations = $product->get_available_variations();

        if( count($available_variations) > 0 ){
            foreach( $available_variations as $variation )
                $output .= format_product_data_output( $variation['variation_id'] );
        }
    }
    // Simple products
    elseif( $product->is_type('simple'))
    {
        $output .= format_product_data_output( $product->get_id() );
    }
    else return; // Exit

    echo $output .= '</div>'; // Display
}
//实用功能:获取和格式化产品数据
函数格式\u产品\u数据\u输出(\u id){
$empty=_uu('(empty)'woocommerce');
//获取WC_产品_变体对象的实例
$product=wc\U get\U product($U id);
//如果产品在展示时包含或不包含税费,则仅wc_获得_price_to_display()尊重
$price=wc_price(wc_get_price_to_display($product,array('price'=>$product->get_regular_price()));
$sale_price=wc_get_price_to_display($product,array('price'=>$product->get_sale_price());
$sale\u price=!empty($sale\u price)?wc\u price($sale\u price):$empty;
$size=$product->get_属性('pa_size');
$size=!empty($size)?通过('slug',$size,'pa_size')->name:$empty;
$stock\u quantity=$product->get\u stock\u quantity();
$stock\U qty=!空($stock\U qty)?$stock\U qty:$empty;
$output=
  • 。$price
  • 大小:'.$size'
  • 。$sale\u价格。首选客户价格
  • 库存数量:'.$stock\U QUOTY'
'; 返回$output; } // 添加操作(“单个产品后添加商业”、“单个产品后添加自定义表”); 函数自定义\u表\u后的\u单个\u产品(){ 全球$产品; $output=''; //可变产品 如果($product->is_类型('variable')) { //获取可变产品中的可用变体 $available_variations=$product->get_available_variations(); 如果(计数($available_variations)>0){ foreach($可用的变更作为$变更) $output.=格式产品数据输出($variation['variation\u id']); } } //简单产品 elseif($product->is_type('simple')) { $output.=格式化产品数据输出($product->get_id()); } else返回;//退出 echo$输出。='';//显示 }
代码进入活动子主题(或活动主题)的function.php文件。测试和工作


您必须管理CSS(可能需要一些小细节)。需要的任何东西都在那里。

如果您像在我的屏幕上那样设置大小属性

然后创建具有属性大小的简单或可变产品,然后可以将代码添加到活动子主题(或活动主题)的functions.php文件中

/**
*在单个产品之后显示列表数据
*/
功能显示\u单产品后的\u列表\u(){
$product_data=获取产品_数据();
?>

谢谢,这似乎在很大程度上是有效的,但是大小数据并没有为可变产品填充。我不得不从
'Size'=>$prod\u var\u arr['attributes']['attribute\u pa\u Size']更新您的数据,
改为
'Size'=>$prod\u var\u arr['attributes']['attributes\u Size'],
对于变量typeBy默认属性是taxonomy,并且有pa_uuuu前缀。我很难理解为什么