2017-09-12 90 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

相關問題