• geiserestudio

    (@geiserestudio)


    Buenos días,

    Estoy teniendo problemas con el plugin PDF Invoices, hace unos meses modifiqué mi archivo functions.php del tema hijo para agregar un código php que añadiera el campo del dni en las compras de woocommerce.

    Ahora al instalar este plugin me arroja el siguiente error y no sé como arreglarlo ya que el código php lo domino lo justo.

    ¿Me podrían ayudar?

    Fatal error: Call to a member function custom_field() on null
    /home/neurova/www/wp-content/themes/porto-child/functions.php (166)
    #0 /home/neurova/www/wp-includes/class-wp-hook.php(326): incluir_nif_en_factura('APANATE ASOCIAC...')
    #1 /home/neurova/www/wp-includes/plugin.php(205): WP_Hook->apply_filters('APANATE ASOCIAC...', Array)
    #2 /home/neurova/www/wp-content/plugins/woocommerce-pdf-invoices-packing-slips/includes/documents/abstract-wcpdf-order-document-methods.php(93): apply_filters('wpo_wcpdf_billi...', 'APANATE ASOCIAC...', Object(WPO\WC\PDF_Invoices\Documents\Invoice))
    #3 /home/neurova/www/wp-content/plugins/woocommerce-pdf-invoices-packing-slips/includes/documents/abstract-wcpdf-order-document-methods.php(102): WPO\WC\PDF_Invoices\Documents\Order_Document_Methods->get_billing_address()
    #4 /home/neurova/www/wp-content/plugins/woocommerce-pdf-invoices-packing-slips/templates/Simple/invoice.php(42): WPO\WC\PDF_Invoices\Documents\Order_Document_Methods->billing_address()
    #5 /home/neurova/www/wp-content/plugins/woocommerce-pdf-invoices-packing-slips/includes/documents/abstract-wcpdf-order-document.php(1138): include('/home/neurova/w...')
    #6 /home/neurova/www/wp-content/plugins/woocommerce-pdf-invoices-packing-slips/includes/documents/abstract-wcpdf-order-document.php(982): WPO\WC\PDF_Invoices\Documents\Order_Document->render_template('/home/neurova/w...', Array)
    #7 /home/neurova/www/wp-content/plugins/woocommerce-pdf-invoices-packing-slips/includes/documents/abstract-wcpdf-order-document.php(937): WPO\WC\PDF_Invoices\Documents\Order_Document->get_html()
    #8 /home/neurova/www/wp-content/plugins/woocommerce-pdf-invoices-packing-slips/includes/documents/abstract-wcpdf-order-document.php(1004): WPO\WC\PDF_Invoices\Documents\Order_Document->get_pdf()
    #9 /home/neurova/www/wp-content/plugins/woocommerce-pdf-invoices-packing-slips/includes/class-wcpdf-main.php(580): WPO\WC\PDF_Invoices\Documents\Order_Document->output_pdf('inline')
    #10 /home/neurova/www/wp-includes/class-wp-hook.php(324): WPO\WC\PDF_Invoices\Main->generate_document_ajax('')
    #11 /home/neurova/www/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters('', Array)
    #12 /home/neurova/www/wp-includes/plugin.php(517): WP_Hook->do_action(Array)
    #13 /home/neurova/www/wp-admin/admin-ajax.php(188): do_action('wp_ajax_generat...')
    #14 {main}

    Y este es el código que añadí a mi functions, el error 166 que indica arriba es esta línea: ($wpo_wcpdf->custom_field( ‘NIF’, ‘NIF: ‘ ):

    /**
    
     * Añade el campo NIF a la página de checkout de WooCommerce
    
     */
    
    add_action( 'woocommerce_after_order_notes', 'agrega_mi_campo_personalizado' );
    
    function agrega_mi_campo_personalizado( $checkout ) {
    
        echo '<div id="additional_checkout_field"><h2 class="informacion">' . __('Información adicional') . '</h2>';
    
       woocommerce_form_field( 'nif', array(
    
            'type'          => 'text',
    
            'class'         => array('my-field-class form-row-wide'),
    
            'label'         => __('NIF-DNI'),
    
            'required'      => true,
    
            'placeholder'   => __('Introduzca el Nº NIF-DNI'),
    
            ), $checkout->get_value( 'nif' ));
    
       echo '</div>';
    
    }
    
    /**
    
     * Comprueba que el campo NIF no esté vacío
    
     */
    
    add_action('woocommerce_checkout_process', 'comprobar_campo_nif');
    
    function comprobar_campo_nif() {
    
        // Comprueba si se ha introducido un valor y si está vacío se muestra un error.
    
        if ( ! $_POST['nif'] )
    
            wc_add_notice( __( 'NIF-DNI, es un campo requerido. Debe de introducir su NIF DNI para finalizar la compra.' ), 'error' );
    }
    
    
    /**
    
     * Actualiza la información del pedido con el nuevo campo
    
     */
    
    add_action( 'woocommerce_checkout_update_order_meta', 'actualizar_info_pedido_con_nuevo_campo' );
    
    function actualizar_info_pedido_con_nuevo_campo( $order_id ) {
    
        if ( ! empty( $_POST['nif'] ) ) {
    
            update_post_meta( $order_id, 'NIF', sanitize_text_field( $_POST['nif'] ) );
    
        }
    
    }
    
    /**
    
     * Muestra el valor del nuevo campo NIF en la página de edición del pedido
    
     */
    
    add_action( 'woocommerce_admin_order_data_after_billing_address', 'mostrar_campo_personalizado_en_admin_pedido', 10, 1 );
    
    function mostrar_campo_personalizado_en_admin_pedido($order){
    
        echo '<p><strong>'.__('NIF').':</strong> ' . get_post_meta( $order->id, 'NIF', true ) . '</p>';
    
    }
    
    /**
    
     * Incluye el campo NIF en el email de notificación del cliente
    
     */
    
    add_filter('woocommerce_email_order_meta_keys', 'muestra_campo_personalizado_email');
    
    function muestra_campo_personalizado_email( $keys ) {
    
        $keys[] = 'NIF';
    
        return $keys;
    
    }
    
    /**
    
    *Incluir NIF en la factura (necesario el plugin WooCommerce PDF Invoices & Packing Slips)
    
    */
    
    add_filter( 'wpo_wcpdf_billing_address', 'incluir_nif_en_factura' );
    
    function incluir_nif_en_factura( $address ){
    
      global $wpo_wcpdf;
    
      echo $address . '<p>';
    
      $wpo_wcpdf->custom_field( 'NIF', 'NIF: ' );
    
      echo '</p>';
    
    }
Viendo 3 respuestas - de la 1 a la 3 (de un total de 3)
  • Moderador kallookoo

    (@kallookoo)

    Hola,

    Desconozco tus conocimientos pero viendo el codigo, puedo deducir que usas una global y no compruebas que es una clase y que contenga el metodo custom_field.

    Si es este plugin y tras revisar el filtro diria que el codigo correcto seria:

    function incluir_nif_en_factura( $address , $wcpdf ){
      $address .= sprintf( '<p>NIF: %s</p>', $wcpdf->custom_field( 'NIF' ) );
    
      return $address;
    }
    add_filter( 'wpo_wcpdf_billing_address', 'incluir_nif_en_factura', 10, 2 );
    

    Ojo, no lo he probado.

    • Esta respuesta fue modificada hace 1 mes por kallookoo. Razón: Error Bloque codigo
    Iniciador del debate geiserestudio

    (@geiserestudio)

    Hola,

    Gracias por tu respuesta pero me genera un error. He sustituido esto:

    
    /**
    
    *Incluir NIF en la factura (necesario el plugin WooCommerce PDF Invoices & Packing Slips)
    
    */
    
    add_filter( 'wpo_wcpdf_billing_address', 'incluir_nif_en_factura' );
    
    function incluir_nif_en_factura( $address ){
    
      global $wpo_wcpdf;
    
      echo $address . '<p>';
    
      $wpo_wcpdf->custom_field( 'NIF', 'NIF: ' );
    
      echo '</p>';
    
    }

    Por lo que me has comentado

    function incluir_nif_en_factura( $address , $wcpdf ){
      $address .= sprintf( '<p>NIF: %s</p>', $wcpdf->custom_field( 'NIF' ) );
    
      return $address;
    }
    add_filter( 'wpo_wcpdf_billing_address', 'incluir_nif_en_factura', 10, 2 );

    Y me ha generado un error crítico. ¿Podrías ponerlo con el código anterior entero?

    PD: si, es el plugin que mencionas.

    • Esta respuesta fue modificada hace 3 semanas, 5 días por geiserestudio.
    Moderador kallookoo

    (@kallookoo)

    Hola,

    Exactamente que error critico obtienes?

    Creo que seria mejor que directamente le preguntes a los creadores, para saber realmente como hacerlo. Ya que por lo que yo recuerdo era ese filtro y no deberia darte ningun error.

    Saludos

Viendo 3 respuestas - de la 1 a la 3 (de un total de 3)
  • Debes estar registrado para responder a este debate.