Usando wc_get_product() con una variable de PHP para la identificación del producto

4 minutos de lectura

avatar de usuario
Andrew-ThinkUp

Estoy creando páginas de destino personalizadas para productos en WooCommerce y me gustaría obtener el precio del producto, entre otras cosas, para mostrarlas en la página de destino.

Cada página de destino tiene algunos campos personalizados que permiten al administrador de WP agregar contenido, tanto para la página de destino como para la identificación del producto, que luego se utilizará para generar el precio del producto, la URL de pago, etc.

no puedo conseguir el wc_get_product(); para trabajar con mi campo personalizado o una variable construida a partir de eso. Solo funciona cuando uso una identificación directa. Creo que hay algo que no entiendo acerca de cómo funcionan las variables dentro de PHP. Aquí está mi código.

<?php 

//Gets the course ID from the custom field entered by user
$courseID = the_field('course_id');

// This line is where the problem is...
$_product = wc_get_product('$courseID');

// If I replace the line above with this line
// $_product = wc_get_product('7217');
//  everything works great, but that does not let 
// each landing page function based on the custom fields where the user determines 
// the product ID they are selling on that landing page.


// Get's the price of the product
$course_price = $_product->get_regular_price();

// Output the Course price
?>  <span class="coursePrice">$<?php echo $course_price;?></span>

Actualizar

me sale el siguiente error usando wc_get_product( $courseID ); o get_product( $courseID );:

Fatal error: Call to a member function get_regular_price() on a non-object in ... 

avatar de usuario
LoicTheAztec

Actualizar relacionado con tu reciente comentario. Las 2 formas de explorar:

1) En su lugar, debe intentar usar para obtener el objeto del producto (evitando el error):

$courseID = the_field('course_id');

// Optionally try this (uncommenting)
// $courseID = (int)$courseID;

// Get an instance of the product object
$_product = new WC_Product($courseID);

2) Alternativamente, si esto no funciona, debe intentar usar get_post_meta() función para obtener el precio del producto (o cualquier metadato del producto) Por aquí:

<?php 
//Gets the course ID from the custom field entered by user
$courseID = the_field('course_id');

// Get the product price (from this course ID):
$course_price = get_post_meta($courseID, '_regular_price', true); 

// Output the Course price
?>  <span class="coursePrice">$<?php echo $course_price;?></span>

Esta vez debería mostrar el precio con una u otra solución.


Actualizar: Puede ser que también necesite convertir $courseID en una variable entera.

Porque necesitas usar tu variable $courseID en el interior wc_get_product() (sin los 2 ') funcionan de esta manera:

<?php 

//Gets the course ID from the custom field entered by user
$courseID = the_field('course_id');

// Optionally try this (uncommenting)
// $courseID = (int)$courseID;

// Here
$_product = wc_get_product( $courseID );

$course_price = $_product->get_regular_price();

// Output the Course price
?>  <span class="coursePrice">$<?php echo $course_price;?></span>

Esto debería funcionar ahora.

  • Debería haber mencionado que ya probé esto sin el '' y genera un error a una llamada en un no objeto. Fatal error: Call to a member function get_regular_price() on a non-object in ...

    – Andrew-Piensa

    19 de enero de 2017 a las 15:06


  • ¡Gracias por tu ayuda! No habría podido eliminar las otras opciones sin él. ¡Muy apreciado!

    – Andrew-Piensa

    20/01/2017 a las 20:55

Puedes probar esto:

$courseID = the_field('course_id');
$product = get_product( $courseID );

  • Usando la mayor get_product(); la función aún no funciona al eliminar las comillas. Vea mi respuesta a @LoicTheAztec a continuación

    – Andrew-Piensa

    19 de enero de 2017 a las 15:08

Descubrí la respuesta después de analizar las posibles rutas de solución que @LoicTheAztec proporcionó en su respuesta. Ninguno de estos funcionó, así que asumí que algo más estaba pasando.

Uso campos personalizados avanzados para agregar campos personalizados en el back-end y estaba usando ACF the_field() para crear mi variable. Ese es un uso incorrecto de esa función, ya que está diseñada para mostrar el campo (básicamente está usando el eco de php). Para trabajar con estos campos personalizados, debe usar ACf get_field() que es para úselo para almacenar un valor, hacer eco de un valor e interactuar con un valor.

Una vez cambié a configurar mi $courseID a esto…

$courseID = get_field('course_id'); 

Todo funcionó. Mi código funcionó, y todos los enfoques de código de @LoicTheAztec también funcionaron.

  • hola si!!! eso fue tan evidente que no lo vi esta vez… Ya he respondido con ACF get_field() / the_field()… Este es un error muy común.

    – LoicTheAztec

    21 de enero de 2017 a las 2:14

¿Ha sido útil esta solución?

Usando wc_get_product() con una variable de PHP para la identificación del producto

4 minutos de lectura

avatar de usuario
Andrew-ThinkUp

Estoy creando páginas de destino personalizadas para productos en WooCommerce y me gustaría obtener el precio del producto, entre otras cosas, para mostrarlas en la página de destino.

Cada página de destino tiene algunos campos personalizados que permiten al administrador de WP agregar contenido, tanto para la página de destino como para la identificación del producto, que luego se utilizará para generar el precio del producto, la URL de pago, etc.

no puedo conseguir el wc_get_product(); para trabajar con mi campo personalizado o una variable construida a partir de eso. Solo funciona cuando uso una identificación directa. Creo que hay algo que no entiendo acerca de cómo funcionan las variables dentro de PHP. Aquí está mi código.

<?php 

//Gets the course ID from the custom field entered by user
$courseID = the_field('course_id');

// This line is where the problem is...
$_product = wc_get_product('$courseID');

// If I replace the line above with this line
// $_product = wc_get_product('7217');
//  everything works great, but that does not let 
// each landing page function based on the custom fields where the user determines 
// the product ID they are selling on that landing page.


// Get's the price of the product
$course_price = $_product->get_regular_price();

// Output the Course price
?>  <span class="coursePrice">$<?php echo $course_price;?></span>

Actualizar

me sale el siguiente error usando wc_get_product( $courseID ); o get_product( $courseID );:

Fatal error: Call to a member function get_regular_price() on a non-object in ... 

avatar de usuario
LoicTheAztec

Actualizar relacionado con tu reciente comentario. Las 2 formas de explorar:

1) En su lugar, debe intentar usar para obtener el objeto del producto (evitando el error):

$courseID = the_field('course_id');

// Optionally try this (uncommenting)
// $courseID = (int)$courseID;

// Get an instance of the product object
$_product = new WC_Product($courseID);

2) Alternativamente, si esto no funciona, debe intentar usar get_post_meta() función para obtener el precio del producto (o cualquier metadato del producto) Por aquí:

<?php 
//Gets the course ID from the custom field entered by user
$courseID = the_field('course_id');

// Get the product price (from this course ID):
$course_price = get_post_meta($courseID, '_regular_price', true); 

// Output the Course price
?>  <span class="coursePrice">$<?php echo $course_price;?></span>

Esta vez debería mostrar el precio con una u otra solución.


Actualizar: Puede ser que también necesite convertir $courseID en una variable entera.

Porque necesitas usar tu variable $courseID en el interior wc_get_product() (sin los 2 ') funcionan de esta manera:

<?php 

//Gets the course ID from the custom field entered by user
$courseID = the_field('course_id');

// Optionally try this (uncommenting)
// $courseID = (int)$courseID;

// Here
$_product = wc_get_product( $courseID );

$course_price = $_product->get_regular_price();

// Output the Course price
?>  <span class="coursePrice">$<?php echo $course_price;?></span>

Esto debería funcionar ahora.

  • Debería haber mencionado que ya probé esto sin el '' y genera un error a una llamada en un no objeto. Fatal error: Call to a member function get_regular_price() on a non-object in ...

    – Andrew-Piensa

    19 de enero de 2017 a las 15:06


  • ¡Gracias por tu ayuda! No habría podido eliminar las otras opciones sin él. ¡Muy apreciado!

    – Andrew-Piensa

    20/01/2017 a las 20:55

Puedes probar esto:

$courseID = the_field('course_id');
$product = get_product( $courseID );

  • Usando la mayor get_product(); la función aún no funciona al eliminar las comillas. Vea mi respuesta a @LoicTheAztec a continuación

    – Andrew-Piensa

    19 de enero de 2017 a las 15:08

Descubrí la respuesta después de analizar las posibles rutas de solución que @LoicTheAztec proporcionó en su respuesta. Ninguno de estos funcionó, así que asumí que algo más estaba pasando.

Uso campos personalizados avanzados para agregar campos personalizados en el back-end y estaba usando ACF the_field() para crear mi variable. Ese es un uso incorrecto de esa función, ya que está diseñada para mostrar el campo (básicamente está usando el eco de php). Para trabajar con estos campos personalizados, debe usar ACf get_field() que es para úselo para almacenar un valor, hacer eco de un valor e interactuar con un valor.

Una vez cambié a configurar mi $courseID a esto…

$courseID = get_field('course_id'); 

Todo funcionó. Mi código funcionó, y todos los enfoques de código de @LoicTheAztec también funcionaron.

  • hola si!!! eso fue tan evidente que no lo vi esta vez… Ya he respondido con ACF get_field() / the_field()… Este es un error muy común.

    – LoicTheAztec

    21 de enero de 2017 a las 2:14

¿Ha sido útil esta solución?