问题描述
我在实体中定义了常量,例如:
$fieldName = User::MetaDATA_OF_USER
它作为实体getter参数传递:
public function getMetadatafield($fieldName)
{
$Metadata = json_decode($this->Metadata,true);
return $Metadata[$fieldName] ?? null;
}
当我尝试通过树枝时将其传递:
{ item.Metadatafield }}
它要求fieldName参数为常量。
我尝试了一些树枝常量的解决方案,但没有一个对我有用。我有什么方法可以在视图中注入该常量?
解决方法
根据Twig documentation,您需要使用add_action('woocommerce_after_product_attribute_settings','wcb_add_product_attribute_is_highlighted',10,2);
add_action('wp_ajax_woocommerce_save_attributes','wcb_ajax_woocommerce_save_attributes',0);
function get_attribute_highlighted($id) {
global $post;
$id = sanitize_title($id);
$id = strtolower($id);
$val = get_post_meta( $post->ID,"attribute_".$id."_highlighted",true);
return !empty($val) ? $val : false;
}
function wcb_add_product_attribute_is_highlighted($attribute,$i=0) {
$value = get_attribute_highlighted($attribute->get_name()); ?>
<tr>
<td>
<div>
<span class="enable_highlighted"> הערות תכונה</span>
<label><input type="text" name="attribute_highlighted[<?php echo esc_attr( $i ); ?>]" value="<?php echo esc_attr($value); ?>"/> </label>
</div>
</td>
</tr>
<?php
}
function wcb_ajax_woocommerce_save_attributes() {
check_ajax_referer( 'save-attributes','security' );
parse_str( $_POST['data'],$data );
$post_id = absint( $_POST['post_id'] );
if(array_key_exists("attribute_highlighted",$data) && is_array($data["attribute_highlighted"])) {
foreach($data["attribute_highlighted"] as $i => $val) {
$attr_name = sanitize_title($data["attribute_names"][$i]);
$attr_name = strtolower($attr_name);
update_post_meta( $post_id,"attribute_".$attr_name."_highlighted",$val);
}
}
}
函数:
constant
请注意{{ item.getMetaDataField(constant('Namespace\\User::METADATA_OF_USER')) }}
// or
{{ item.getMetaDataField(constant('METADATA_OF_USER',instance)) }}
。