2017-09-12 53 views
1

我试图获取woocommerce产品产品属性(其名称为dwnfile)的值。在Quform钩子中获取Woocommerce产品属性值

该值是一个要传入挂钩函数的url,该函数将填充表单重定向。我正在使用的表格是女佣Quform commercial plugin

我已经收到了插件作者关于我的表单设置的代码,但是他们无法通知我如何获取属性值。

这是他们给我的最初代码:

function my_populate_wc_attribute($form) 
{ 
    $value = 'some value'; // Get the value from WooCommerce somehow 

    $form->setValue('iphorm_3_2', $value); 
} 
add_action('iphorm_pre_display_3', 'my_populate_wc_attribute'); 

这里是我的尝试:

function my_populate_wc_attribute($form) 
{ 
    global $product; 
    $value = array_shift(wc_get_product_terms($product->id, 'pa_dwnfile', array('fields' => 'names'))); 
    $form->setValue('iphorm_3_2', $value); 
} 
add_action('iphorm_pre_display_3', 'my_populate_wc_attribute'); 

但价值似乎是空的。

对此有任何帮助吗?

+1

“iphorm_pre_display_3”不是WooCommerce挂钩...这意味着您正在使用第三方插件。你应该更新你的问题,关于你正在使用的这个表单插件的更多细节... – LoicTheAztec

+0

谢谢。我用更多的细节修改了我的问题。 – Dan

回答

0

更新(末)

问题仍然$product全局对象(你不要在这个钩子获取)。

你应该尝试,而不是:

function my_populate_wc_attribute($form) { 
    global $post; 
    $term = wc_get_product_terms($post->id, 'pa_nopeus', array('fields' => 'names')); 
    $value = current($term); 
    $form->setValue('iphorm_3_2', $value); 
} 
add_action('iphorm_pre_display_3', 'my_populate_wc_attribute'); 

代码放在您的活动子主题(或主题)的function.php文件或也以任何插件文件。

这应该工作。

但是,这不是最好的办法。您应该在产品“常规”设置选项卡中添加自定义字段,而不是使用产品属性来获取URL值。


UPDATE:你的主要问题是,你的形式是不是在你的产品页面,所以你不能得到后ID(or the product ID)

你可以尝试用产品自定义字段(而不是产品属性)来做到这一点。

下面是自定义字段代码:

// Add Fields 
add_action('woocommerce_product_options_general_product_data', 'add_product_general_custom_field'); 
function add_product_general_custom_field() { 
    global $post; 

    // Get the selected value 
    $value = get_post_meta($post->ID, '_dwnfile', true); 
    if(empty($value)) $value = ''; 

    woocommerce_wp_text_input(array(
     'id'   => 'dwnfile', 
     'label'   => __('Download link', 'woocommerce'), 
     'placeholder' => '', 
     'desc_tip'  => 'true', 
     'description' => __('Add your download link …', 'woocommerce'), 
     'value'   => $value, // Displaying the selected value 
    )); 
} 

// Save Fields 
add_action('woocommerce_process_product_meta', 'save_product_general_custom_field'); 
function save_product_general_custom_field($post_id){ 

    if(empty($_POST['dwnfile'])) return; 
    update_post_meta($post_id, '_dwnfile', esc_attr($_POST['dwnfile'])); 
} 

你会得到你的“下载链接”自定义字段(在产品的常规选项):

enter image description here

代码放在你的活动子主题(或主题)或任何插件文件中的function.php文件。

表格应该在产品页面上以获取产品ID。如果不是这样的话,什么都不会起作用。

因此,你应该更好地告诉你正在尝试做什么。

,以便获得url值,您将使用:

$value = get_post_meta($post_id, '_dwnfile', true); 

或者(如果没有定义产品ID):

$value = get_post_meta(get_the_id(), '_dwnfile', true); 

现在你可以问插件的作者因为这是一种更经典的方式:发布元数据

+0

感谢您的帮助。我试过了,但它似乎没有奏效。我将“pa_nopeus”更改为“pa_dwnfile”,但似乎没有流过。 – Dan

+0

@丹我更新了我的答案......全球的答案是**你不能让它工作,因为你的表单不在产品页面,因为你永远不会获得帖子ID **。所以你应该更好地告诉你想要做什么以及该表单位于何处。 – LoicTheAztec

+1

感谢您的帮助。我做了一个小小的改变,似乎运作良好。我只是将代码更改为:$ value = get_post_meta(get_the_ID(),'_dwnfile',true); – Dan

相关问题