Woocommerce 在 wc 属性标签函数中获取属性自定义字段
Woocommerce get attribute custom field in wc attribute labels function
add_filter('woocommerce_attribute_label', 'custom_attribute_label', 10, 3);
function custom_attribute_label($label, $name, $product) {
$term_meta = get_term_meta($name, 'attribute_description', true);
switch ($label) {
case 'size':
$label .= '<div class="custom-label">' . __('MY TEXT AFTER LOGO', 'woocommerce') . '</div>';
break;
case 'color':
$label .= '<div class="custom-label">' . __('MY TEXT AFTER COLOR', 'woocommerce') . '</div>';
break;
}
return $label;
}
您好,请问在woocommerce_attribute_label
钩子中是否可以将自定义注册字段放入属性后端页面。
字段的 ID 为“attribute_description”,我无法使用显示前端的方法。
任何帮助将不胜感激!
注册字段代码(我关注了网上的话题,学习了):
// Add variation description
function my_edit_wc_attribute_my_field() {
$id = isset( $_GET['edit'] ) ? absint( $_GET['edit'] ) : 0;
$value = $id ? get_option( "wc_attribute_attribute_description-$id" ) : '';
?>
<div id="attr-desc">
<tr class="form-field">
<th scope="row" valign="top">
<label for="attribute-description">Attribute Description</label>
</th>
<td>
<textarea name="attribute_description" id="attribute-description" rows="5" cols="40"><?php echo esc_attr( $value ); ?></textarea>
<!--<input name="my_field" id="my-field" value="<?php //echo esc_attr( $value ); ?>" />-->
<p class="description">Add unique description that will appear in balloon field in single product page.</p>
</td>
</tr>
</div>
<script>
jQuery(function($) {
$('#attr-desc').appendTo('.form-field:eq(1)');
//$('#attr-desc').hide();
});
</script>
<?php
}
add_action( 'woocommerce_after_add_attribute_fields', 'my_edit_wc_attribute_my_field' );
add_action( 'woocommerce_after_edit_attribute_fields', 'my_edit_wc_attribute_my_field' );
// Save variation description
function my_save_wc_attribute_my_field( $id ) {
if ( is_admin() && isset( $_POST['attribute_description'] ) ) {
$option = "wc_attribute_attribute_description-$id";
update_option( $option, sanitize_text_field( $_POST['attribute_description'] ) );
}
}
add_action( 'woocommerce_attribute_added', 'my_save_wc_attribute_my_field' );
add_action( 'woocommerce_attribute_updated', 'my_save_wc_attribute_my_field' );
// Delete option, when attribute is deleted
add_action( 'woocommerce_attribute_deleted', function ( $id ) {
delete_option( "wc_attribute_attribute_description-$id" );
});
// Then for example, on a taxonomy/term archive page, you can get the My Field value like so:
/*
$term = get_queried_object();
$attr_id = wc_attribute_taxonomy_id_by_name( $term->taxonomy );
$my_field = get_option( "wc_attribute_my_field-$attr_id" );
*/
保存 Attribute Description
的方式有点棘手,因为您将其保存在选项 table.
中
您正在使用属性 ID wc_attribute_attribute_description-$id
保存选项,因此您必须按照相同的过程从选项中获取,为此,您需要该属性的 ID。
在 woocommerce_attribute_label
过滤器挂钩中,您只能获得属性的 $name
。所以我们必须获得属性分类法 ID。并且,为此你可以使用 wc_attribute_taxonomy_id_by_name()
函数。
$id = wc_attribute_taxonomy_id_by_name( $name );
完整代码。
function custom_attribute_label($label, $name, $product) {
$id = wc_attribute_taxonomy_id_by_name( $name );
$value = get_option( "wc_attribute_attribute_description-$id" );
switch ($name) {
case 'pa_test2':
$label .= '<div class="custom-label">' . $value . '</div>';
break;
}
return $label;
}
add_filter('woocommerce_attribute_label', 'custom_attribute_label', 10, 3);
// Add variation description
function my_edit_wc_attribute_my_field() {
$id = isset( $_GET['edit'] ) ? absint( $_GET['edit'] ) : 0;
$value = $id ? get_option( "wc_attribute_attribute_description-$id" ) : '';
?>
<div id="attr-desc">
<tr class="form-field">
<th scope="row" valign="top">
<label for="attribute-description">Attribute Description</label>
</th>
<td>
<textarea name="attribute_description" id="attribute-description" rows="5" cols="40"><?php echo esc_attr( $value ); ?></textarea>
<p class="description">Add unique description that will appear in balloon field in single product page.</p>
</td>
</tr>
</div>
<script>
jQuery(function($) {
$('#attr-desc').appendTo('.form-field:eq(1)');
});
</script>
<?php
}
add_action( 'woocommerce_after_add_attribute_fields', 'my_edit_wc_attribute_my_field' );
add_action( 'woocommerce_after_edit_attribute_fields', 'my_edit_wc_attribute_my_field' );
// Save variation description
function my_save_wc_attribute_my_field( $id ) {
if ( is_admin() && isset( $_POST['attribute_description'] ) ) {
$option = "wc_attribute_attribute_description-$id";
update_option( $option, sanitize_text_field( $_POST['attribute_description'] ) );
}
}
add_action( 'woocommerce_attribute_added', 'my_save_wc_attribute_my_field' );
add_action( 'woocommerce_attribute_updated', 'my_save_wc_attribute_my_field' );
备注
我已经复制了整个案例,所以我添加了 test2
属性,所以不要忘记在 woocommerce_attribute_label
过滤器挂钩中将 pa_test2
更改为您的属性名称。
已测试并有效
后端分类名称
后端属性描述
单个产品页面
add_filter('woocommerce_attribute_label', 'custom_attribute_label', 10, 3);
function custom_attribute_label($label, $name, $product) {
$term_meta = get_term_meta($name, 'attribute_description', true);
switch ($label) {
case 'size':
$label .= '<div class="custom-label">' . __('MY TEXT AFTER LOGO', 'woocommerce') . '</div>';
break;
case 'color':
$label .= '<div class="custom-label">' . __('MY TEXT AFTER COLOR', 'woocommerce') . '</div>';
break;
}
return $label;
}
您好,请问在woocommerce_attribute_label
钩子中是否可以将自定义注册字段放入属性后端页面。
字段的 ID 为“attribute_description”,我无法使用显示前端的方法。
任何帮助将不胜感激!
注册字段代码(我关注了网上的话题,学习了):
// Add variation description
function my_edit_wc_attribute_my_field() {
$id = isset( $_GET['edit'] ) ? absint( $_GET['edit'] ) : 0;
$value = $id ? get_option( "wc_attribute_attribute_description-$id" ) : '';
?>
<div id="attr-desc">
<tr class="form-field">
<th scope="row" valign="top">
<label for="attribute-description">Attribute Description</label>
</th>
<td>
<textarea name="attribute_description" id="attribute-description" rows="5" cols="40"><?php echo esc_attr( $value ); ?></textarea>
<!--<input name="my_field" id="my-field" value="<?php //echo esc_attr( $value ); ?>" />-->
<p class="description">Add unique description that will appear in balloon field in single product page.</p>
</td>
</tr>
</div>
<script>
jQuery(function($) {
$('#attr-desc').appendTo('.form-field:eq(1)');
//$('#attr-desc').hide();
});
</script>
<?php
}
add_action( 'woocommerce_after_add_attribute_fields', 'my_edit_wc_attribute_my_field' );
add_action( 'woocommerce_after_edit_attribute_fields', 'my_edit_wc_attribute_my_field' );
// Save variation description
function my_save_wc_attribute_my_field( $id ) {
if ( is_admin() && isset( $_POST['attribute_description'] ) ) {
$option = "wc_attribute_attribute_description-$id";
update_option( $option, sanitize_text_field( $_POST['attribute_description'] ) );
}
}
add_action( 'woocommerce_attribute_added', 'my_save_wc_attribute_my_field' );
add_action( 'woocommerce_attribute_updated', 'my_save_wc_attribute_my_field' );
// Delete option, when attribute is deleted
add_action( 'woocommerce_attribute_deleted', function ( $id ) {
delete_option( "wc_attribute_attribute_description-$id" );
});
// Then for example, on a taxonomy/term archive page, you can get the My Field value like so:
/*
$term = get_queried_object();
$attr_id = wc_attribute_taxonomy_id_by_name( $term->taxonomy );
$my_field = get_option( "wc_attribute_my_field-$attr_id" );
*/
保存 Attribute Description
的方式有点棘手,因为您将其保存在选项 table.
您正在使用属性 ID wc_attribute_attribute_description-$id
保存选项,因此您必须按照相同的过程从选项中获取,为此,您需要该属性的 ID。
在 woocommerce_attribute_label
过滤器挂钩中,您只能获得属性的 $name
。所以我们必须获得属性分类法 ID。并且,为此你可以使用 wc_attribute_taxonomy_id_by_name()
函数。
$id = wc_attribute_taxonomy_id_by_name( $name );
完整代码。
function custom_attribute_label($label, $name, $product) {
$id = wc_attribute_taxonomy_id_by_name( $name );
$value = get_option( "wc_attribute_attribute_description-$id" );
switch ($name) {
case 'pa_test2':
$label .= '<div class="custom-label">' . $value . '</div>';
break;
}
return $label;
}
add_filter('woocommerce_attribute_label', 'custom_attribute_label', 10, 3);
// Add variation description
function my_edit_wc_attribute_my_field() {
$id = isset( $_GET['edit'] ) ? absint( $_GET['edit'] ) : 0;
$value = $id ? get_option( "wc_attribute_attribute_description-$id" ) : '';
?>
<div id="attr-desc">
<tr class="form-field">
<th scope="row" valign="top">
<label for="attribute-description">Attribute Description</label>
</th>
<td>
<textarea name="attribute_description" id="attribute-description" rows="5" cols="40"><?php echo esc_attr( $value ); ?></textarea>
<p class="description">Add unique description that will appear in balloon field in single product page.</p>
</td>
</tr>
</div>
<script>
jQuery(function($) {
$('#attr-desc').appendTo('.form-field:eq(1)');
});
</script>
<?php
}
add_action( 'woocommerce_after_add_attribute_fields', 'my_edit_wc_attribute_my_field' );
add_action( 'woocommerce_after_edit_attribute_fields', 'my_edit_wc_attribute_my_field' );
// Save variation description
function my_save_wc_attribute_my_field( $id ) {
if ( is_admin() && isset( $_POST['attribute_description'] ) ) {
$option = "wc_attribute_attribute_description-$id";
update_option( $option, sanitize_text_field( $_POST['attribute_description'] ) );
}
}
add_action( 'woocommerce_attribute_added', 'my_save_wc_attribute_my_field' );
add_action( 'woocommerce_attribute_updated', 'my_save_wc_attribute_my_field' );
备注
我已经复制了整个案例,所以我添加了 test2
属性,所以不要忘记在 woocommerce_attribute_label
过滤器挂钩中将 pa_test2
更改为您的属性名称。
已测试并有效
后端分类名称
后端属性描述
单个产品页面