우코머스의 변주곡
저는 woocommerce 테마를 만들고 있으며 제품 상세 페이지에 표시되는 제품 변형을 가지고 있습니다만, 문제는 제품 ID를 사용하여 커스텀 php 페이지에서 모든 변형을 가져오고 싶다는 것입니다.누군가 도와주시겠습니까?
잘 부탁드립니다.
다음을 사용할 수 있습니다.$available_variations = $product->get_available_variations();
이 템플릿이 단일 스타일인 경우 다음 항목을 추가해야 합니다.global $product;꼭대기 근처에.
거기서부터, 당신은 변화를 예고할 수 있고, 당신이 원하는 대로 할 수 있습니다.특별한 성과가 없었으니, 이것으로 올바른 방향으로 나아갈 수 있기를 바랍니다.
다음 코드를 사용할 수 있습니다.
global $woocommerce, $product, $post;
// test if product is variable
if ($product->is_type( 'variable' ))
{
$available_variations = $product->get_available_variations();
foreach ($available_variations as $key => $value)
{
//get values HERE
}
}
다음 코드:
$variations = $product->get_available_variations();
모든 변형 제품을 반환한다.
이 함수는 모든 변동을 표시하는 위치에 배치됩니다.
\wp-content\plugins\woocommerce\templates\single-product\add-to-cart\variable.php
일반적인 문제는 종종 단일 제품의 "재고 중" 또는 "품절" 라벨을 변경하는 것으로부터 시작됩니다.기능을 변경해야 하는 솔루션은 거의 없습니다.php 파일을 만들고 새 필터를 추가합니다.
제품 변형을 위해 이를 수정해야 할 경우 문제가 더욱 복잡해집니다.
이것이 솔루션일 수 있습니다.http://bucketpress.com/changing-stock-availability-text-for-product-variations
제품의 사용 가능한 변형을 표시하려면 변수를 수정해야 합니다.php 파일. /wp-content/plugins/woocommerce/single-product/add-to-params/에 있습니다.
검색:
<form class="variations_form cart" method="post" enctype='multipart/form-data' data-product_id="<?php echo absint( $product->id ); ?>" data-product_variations="<?php echo htmlspecialchars( json_encode( $available_variations ) ) ?>">
태그 붙여넣기 전에 다음 코드를 입력합니다.
foreach( $available_variations as $i => $variation ) {
//check if variation has stock or not
if ( $variation['is_in_stock'] ) {
// Get max qty that user can purchase
$max_qty = $variation['max_qty'];
// Prepare availability html for stock available instance
$availability_html = '<p class="stock in-stock">' . $max_qty . ' units available for your purchase.' . '</p>';
} else {
// Prepare availability html for out of stock instance
$availability_html = '<p class="stock out-of-stock">Oops, we have no stock left.</p>';
}
$available_variations[$i]['availability_html'] = $availability_html; }
php end tag "를 이동하는 것을 잊지 마십시오.이 행에서" >"를 선택합니다.
do_action( 'woocommerce_before_add_to_cart_form' ); ?>
새로운 코드를 따라갑니다.
완전한 변수입니다.php 파일은 다음과 같습니다(WooCommerce 3.2.4).
<?php
/**
* Variable product add to cart
*
* This template can be overridden by copying it to yourtheme/woocommerce/single-product/add-to-cart/variable.php.
*
* HOWEVER, on occasion WooCommerce will need to update template files and you
* (the theme developer) will need to copy the new files to your theme to
* maintain compatibility. We try to do this as little as possible, but it does
* happen. When this occurs the version of the template file will be bumped and
* the readme will list any important changes.
*
* @see https://docs.woocommerce.com/document/template-structure/
* @author WooThemes
* @package WooCommerce/Templates
* @version 3.0.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
global $product;
$attribute_keys = array_keys( $attributes );
do_action( 'woocommerce_before_add_to_cart_form' );
// Your New Code goes here:
foreach( $available_variations as $i => $variation ) {
// check if variation has stock or not
if ( $variation['is_in_stock'] ) {
// Get max qty that user can purchase
$max_qty = $variation['max_qty'];
// Prepare availability html for stock available instance
$availability_html = '<p class="stock in-stock">Available: ' . $max_qty . '</p>';
} else {
// Prepare availability html for out of stock instance
$availability_html = '<p class="stock out-of-stock">Out of stock!</p>';
}
$available_variations[$i]['availability_html'] = $availability_html;
} ?>
<form class="variations_form cart" method="post" enctype='multipart/form-data' data-product_id="<?php echo absint( $product->get_id() ); ?>" data-product_variations="<?php echo htmlspecialchars( wp_json_encode( $available_variations ) ) ?>">
<?php do_action( 'woocommerce_before_variations_form' ); ?>
<?php if ( empty( $available_variations ) && false !== $available_variations ) : ?>
<p class="stock out-of-stock"><?php _e( 'This product is currently out of stock and unavailable.', 'woocommerce' ); ?></p>
<?php else : ?>
<table class="variations" cellspacing="0">
<tbody>
<?php foreach ( $attributes as $attribute_name => $options ) : ?>
<tr>
<td class="label"><label for="<?php echo sanitize_title( $attribute_name ); ?>"><?php echo wc_attribute_label( $attribute_name ); ?></label></td>
<td class="value">
<?php
$selected = isset( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ? wc_clean( stripslashes( urldecode( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ) ) : $product->get_variation_default_attribute( $attribute_name );
wc_dropdown_variation_attribute_options( array( 'options' => $options, 'attribute' => $attribute_name, 'product' => $product, 'selected' => $selected ) );
echo end( $attribute_keys ) === $attribute_name ? apply_filters( 'woocommerce_reset_variations_link', '<a class="reset_variations" href="#">' . esc_html__( 'Clear', 'woocommerce' ) . '</a>' ) : '';
?>
</td>
</tr>
<?php endforeach;?>
</tbody>
</table>
<?php do_action( 'woocommerce_before_add_to_cart_button' ); ?>
<div class="single_variation_wrap">
<?php
/**
* woocommerce_before_single_variation Hook.
*/
do_action( 'woocommerce_before_single_variation' );
/**
* woocommerce_single_variation hook. Used to output the cart button and placeholder for variation data.
* @since 2.4.0
* @hooked woocommerce_single_variation - 10 Empty div for variation data.
* @hooked woocommerce_single_variation_add_to_cart_button - 20 Qty and cart button.
*/
do_action( 'woocommerce_single_variation' );
/**
* woocommerce_after_single_variation Hook.
*/
do_action( 'woocommerce_after_single_variation' );
?>
</div>
<?php do_action( 'woocommerce_after_add_to_cart_button' ); ?>
<?php endif; ?>
<?php do_action( 'woocommerce_after_variations_form' ); ?>
</form>
<?php
do_action( 'woocommerce_after_add_to_cart_form' );
모든 크레딧은 http://bucketpress.com/author/base-admin에서 "Kevin"으로 보내드립니다.
이거 드셔보세요.
<?php
$name_size = get_post_meta($_GET['pr_id'],'product_size', true);
$t_shirt_sizes_array = wp_get_post_terms($_GET['pr_id'],'pa_size');
$t_shirt_size = array();
$t_shirt_price = array();
for($scnt = 0; $scnt < count($t_shirt_sizes_array); $scnt++){
$t_shirt_size[] = $t_shirt_sizes_array[$scnt]->name;
$t_shirt_price[] = $t_shirt_sizes_array[$scnt]->slug;
$t_shirt_size_id[] = $t_shirt_sizes_array[$scnt]->term_id;
}
$cnt = 1;
for($i = 0; $i < count($t_shirt_size); $i++){
$name_size = $t_shirt_size[$i];
$result = $wpdb->get_col( "SELECT slug FROM {$wpdb->prefix}terms WHERE name =
'".$t_shirt_size[$i]."'" );
$term_slug = ( !empty( $result ) ) ? $result[0] : $term;
$query = "SELECT postmeta.post_id AS product_id
FROM {$wpdb->prefix}postmeta AS postmeta
LEFT JOIN {$wpdb->prefix}posts AS products ON ( products.ID = postmeta.post_id )
WHERE postmeta.meta_key LIKE 'attribute_%'
AND postmeta.meta_value = '$term_slug'
AND products.post_parent = ".$_GET['pr_id'];
$variation_id = $wpdb->get_col( $query );
$parent = wp_get_post_parent_id( $variation_id[0] );
if ( $parent > 0 ) {
echo $name_size;
$_product = new WC_Product_Variation( $variation_id[0] );
echo $_product->get_price();
}
$price = $t_shirt_price[$i];
$cnt++;
}
?>
언급URL : https://stackoverflow.com/questions/13466898/woocommerce-variations
'programing' 카테고리의 다른 글
| 테이블 이름 주위의 따옴표는 정확히 어떤 역할을 합니까? (0) | 2023.03.12 |
|---|---|
| JSONArray를 문자열 배열로 변환 (0) | 2023.03.12 |
| AngularJ: ng-click과 조합하여 동작하지 않는 경우? (0) | 2023.03.12 |
| Oracle에서 예약어를 피하려면 어떻게 해야 합니까? (0) | 2023.03.12 |
| AJAX 콜에서 어레이를 반환하는 방법 (0) | 2023.03.12 |