Como exibir um campo personalizado em pedidos de woocommerce no painel de administração?

13

Atualmente, adiciono um campo de cobrança personalizado no woocommerce por

function custom_override_checkout_fields( $fields ) {
     $fields['billing']['billing_phone_new'] = array(
        'label'     => __('Phone 2', 'woocommerce'),
    'placeholder'  => _x('Phone 2', 'placeholder', 'woocommerce'),
    'required'  => false,
    'class'     => array('form-row-wide'),
    'clear'     => true
     );

     return $fields;
}

add_filter('woocommerce_checkout_fields','custom_override_checkout_fields');

Eu preciso editar este valor do campo no lado do administrador. Atualmente, posso editar todos os outros valores no endereço de cobrança, mas esse valor não aparece na seção admin. Eu uso o código a seguir apenas para ver o valor na seção admin.

function order_phone_backend($order){
    echo "<p><strong>Billing phone 2:</strong> " . get_post_meta( $order->id, '_billing_phone_new', true ) . "</p><br>";
} 

add_action( 'woocommerce_admin_order_data_after_billing_address', 'order_phone_backend', 10, 1 );

Eu li a documentação https://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/ . Mas tudo neste documento funcionando corretamente espera que billing_phone / Phone seja observado no campo Personalizado. Verifico a opção da tela, mas já marquei o campo personalizado. Outro campo personalizado e seu valor são visíveis e editáveis.

Como posso editar esse valor no back-end. Por favor ajude .

Ron
fonte
O primeiro bloco de código da sua pergunta modifica o campo padrão 'Telefone não'. Ele não adiciona nenhum novo campo ao formulário de pagamento. Os campos de check-out não estarão disponíveis em "campos personalizados", portanto, não procure nele. Se você deseja editar qualquer um dos campos do endereço de cobrança ou do endereço de entrega, vá para o back-end e clique em qualquer pedido na lista de pedidos. Você verá um pequeno ícone de edição além dos cabeçalhos 'Detalhes de cobrança' e 'Detalhes de remessa'. Clicando sobre isso, você poderá editar esses detalhes. Eu espero que isso ajude.
Prasad Nevase
Por favor, verifique meu código agora
Ron

Respostas:

22

O código que você forneceu está incompleto. Não tenho certeza se esse é o único código que você está usando para alcançar o que deseja. Portanto, além do primeiro bloco de código que você forneceu, abaixo estou adicionando todo o restante do código necessário para mostrar o novo campo no back-end na caixa 'Detalhes do pedido' e torná-lo editável através de campos personalizados. Observe que no seu segundo bloco de código você nomeou a chave do campo como _billing_new_phone. Qualquer nome de chave de campo personalizado que comece com _ (sublinhado) é um campo personalizado oculto e não será exibido no back-end em "Campos personalizados".

/**
 * Process the checkout
 */
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
    // Check if set, if its not set add an error.
    if ( ! $_POST['billing_phone_new'] )
        wc_add_notice( __( 'Phone 2 is compulsory. Please enter a value' ), 'error' );
}


/**
 * Update the order meta with field value
 */
add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );

function my_custom_checkout_field_update_order_meta( $order_id ) {
    if ( ! empty( $_POST['billing_phone_new'] ) ) {
        update_post_meta( $order_id, 'billing_phone_new', sanitize_text_field( $_POST['billing_phone_new'] ) );
    }
}


/**
 * Display field value on the order edit page
 */
add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );

function my_custom_checkout_field_display_admin_order_meta($order){
    echo '<p><strong>'.__('Phone 2').':</strong> <br/>' . get_post_meta( $order->get_id(), 'billing_phone_new', true ) . '</p>';
}

O WooCommerce não torna o novo campo de checkout editável na caixa padrão 'Detalhes do pedido'. Ele estará disponível como modo 'somente visualização' nessa caixa, mas você pode editar o mesmo através do bloco de campos personalizados padrão do WordPress. Veja a captura de tela abaixo.

insira a descrição da imagem aqui

Prasad Nevase
fonte
"" Qualquer nome de chave de campo personalizado que comece com _ (sublinhado) é um campo personalizado oculto e não será exibido no back-end em "Campos personalizados". "" de onde você obtém essas informações?
Ron
2
No codex do WordPress. Você pode obter mais informações aqui
Prasad Nevase
Por favor Helpt resolver o meu amigo pergunta stackoverflow.com/questions/49505056/...
Ron
no meu caso, obtive resultados usando get_post_meta ($ order-> get_id (), '_billing_phone_new', true). Eu tive que colocar sublinhado na frente do nome da variável na função get_post_meta.
Dashrath
1

Aqui está a solução: acessar diretamente os dados do produto não é permitido, por exemplo

$product->id

O método correto daqui para frente é:

$product->get_id()
Gaël
fonte