php - plugin - create table mysql wordpress
Productos de Woocommerce que muestran el mensaje "Agotado" cuando no están realmente agotados (6)
Es 2017 y sigo viendo el problema exacto de OP en una tienda en funcionamiento:
- WordPress 4.8.1
- WooCommerce 3.1.2
- PHP 5.6
- toneladas de complementos y un tema janky
No tengo tiempo para arreglar el error genuinamente, sea lo que sea, pero hice una solución.
El problema es que $product
tiene todo lo relacionado con la variación. No hay ID de variación, atributos ni precios. Mi solución soluciona $product
antes de que se use en las plantillas.
Paso 1 : Copia la plantilla price.php en tu tema. Navegue a la plantilla de precios de WooCommerce en /wp-content/plugins/woocommerce/templates/single-product/price.php
. Copie eso en su tema en /wp-content/themes/my-theme/woocommerce/single-product/price.php
. Si ya tiene ese archivo allí, entonces ya tiene una plantilla personalizada de price.php y puede omitir este paso.
Documentación sobre cómo funcionan las plantillas personalizadas de WooCommerce: https://docs.woocommerce.com/document/template-structure/
Paso 2 : Edite ese price.php
que acaba de poner en su tema. Por debajo global $product;
pega esto:
if ( $product->is_type( ''variable'' ) ) {
// this is a variable product, so let''s ensure $product is set up correctly
// force the product to sync with its variations
$product->sync( $product->id );
// update $product with the synced product
$pf = new WC_Product_Factory();
$product = $pf->get_product( $product->id );
// update utility variables used in the variable.php template
$available_variations = $product->get_available_variations();
$attributes = $product->get_variation_attributes();
}
Tuve algunos problemas de almacenamiento en caché que hicieron que pareciera que al principio no funcionaba. Para probar si funciona, puedes soltar
echo ''<pre style="display: none;">'';
print_r( $product );
echo ''</pre>'';
en la parte superior e inferior de if
. Ahora puede inspeccionar la página, y justo encima del precio estarán los dos productos ocultos <pre>
contienen $product
antes y después de la reparación.
Esto funciona al usar la función sync()
para forzar al producto a tomar toda la información de variación faltante, y luego actualiza las variables para usarlas en las plantillas. Creo que el precio es el primero en que se utiliza cualquiera de los datos de variación en las plantillas, pero este fragmento podría ir fácilmente más arriba en la cadena de plantillas, si es necesario.
Editar: la corrección anterior solo funciona para WooCommerce 3.x. Creé una solución para WC 2.x pero es tan grande y asquerosa que no voy a publicarla. Si todavía tiene una tienda 2.x, debe buscar algún tipo de revisión que le permita obtener 3.x.
Tener un problema con el sitio web de un cliente donde los productos se muestran aleatoriamente
"Este producto está actualmente agotado y no está disponible".
Lo que sucede es que no tenemos activado el seguimiento de inventario, todos los productos deben estar en stock todo el tiempo.
Cuando entro en el administrador de WordPress y hago clic en el botón de actualización del producto (sin cambiar nada), el mensaje desaparece y el botón "Agregar al carro" aparece como debería. Desafortunadamente, el problema se repite en estos artículos en el futuro y para solucionarlo tengo que actualizar el producto nuevamente (también al hacer clic en actualizar en la configuración de WooCommerce resuelve temporalmente el problema).
Necesito encontrar una manera de solucionar este problema permanentemente para que no se revierta.
Detalles del sitio:
- Usando WordPress 3.9.1
- WooCommerce 2.1.12
- PHP 5.3.10 (también probado localmente con 5.5.10)
Lo que he intentado
- Eliminando todos los complementos pero WooCommerce
- Cambiando temas (intenté todos los temas estándar de WordPress y algunos temas de WooThemes inútilmente)
- WooCommerce actualizado (era v 2.1.5)
- Insertada manualmente en wp_postmeta agregando la clave meta
_manage_stock
y configurándola enno
(como se observa en algunos de los productos que tenemos) - Insertado manualmente en wp_postmeta agregando la clave meta ''_stock'' y configurándola en
0
(como se observa en algunos de los productos que tenemos) - Se comparó la postmeta del producto antes y después de hacer clic en el botón de actualización para observar si algo había cambiado que causaría el problema ... nada
- No se ha activado el almacenamiento en caché
- Usó XDebug para rastrear la variable
$available_variations
envariable.php
yclass-wc-ajax.php
yclass-wc-product-variable.php
.
Al depurar, noté que en los productos que funcionaban la variable $available_variations
availability_variations contenía 2 arrays llenos de información del producto; sin embargo, en los productos que no lo hacían, era una matriz vacía (lo que provocaba que el mensaje de agotamiento se mostrara como servido por variable.php
). Al hacer clic en el botón de actualización y luego seguir la variable, se muestra la información correctamente.
Honestamente, en este punto, estoy perdido. Creo que el problema está en alguna parte de cualquiera de las clases, pero no puedo decirlo.
¿Alguien más ha tenido problemas con esto? Cualquier forma de solucionar este problema, así que no tengo que seguir actualizando productos para este cliente.
Enlace al producto que está agotado (a partir de la publicación) http://highlandsministriesonline.org/product/basement-tapes/resentment-in-the-church-135/
Enlace al producto que se muestra correctamente http://highlandsministriesonline.org/product/basement-tapes/bt0111-church-at-corinth-i/
Registro de errores Agregué un registro de errores a la clase de variación del producto. Aquí está el resultado:
Para productos con el mensaje "agotado", no se visualiza nada en el registro.
Un ejemplo de un producto que funciona correctamente:
WC_Product_Variation Object
(
[variation_id] => 1310
[parent] => WC_Product_Variable Object
(
[children] => Array
(
[0] => 1311
[1] => 1310
)
[total_stock] =>
[id] => 1308
[post] => WP_Post Object
(
[ID] => 1308
[post_author] => 1
[post_date] => 2012-04-03 14:29:42
[post_date_gmt] => 2012-04-03 18:29:42
[post_content] => This audio presentation on homeschooling is a Basement Tape conversation on homeschooling.
<h2>What are The Basement Tapes?</h2>
<em>The Basement Tapes</em> are conversations between Dr. R.C. Sproul Jr., Rev. Laurence Windham, their friends and special guests, on subjects related to the “good life,” a simple, separate, and deliberate life, lived out for the glory of God and for the building of His Kingdom.
You might even say that the Basement Tapes serve to help us develop a Christian worldview. Started in 2002, we now have over #140 conversations on all areas of life that we are seeking to think biblically about so that we might take dominion over them for the King and His kingdom.
<strong>Format: Available in both CD and MP3</strong>
<strong>Length: Sixty minutes</strong>
[post_title] => Basement Tape #109: Homeschooling Redux
[post_excerpt] => It''s been 108 weeks since we last talked about the subject of homeschooling our children. Our tykes have grown into teenagers. What have we learned in the past nine years? What has changed? What remains the same is that homeschooling means discipleship; passing down your most important convictions to your children and teaching them our holy religion.
[post_status] => publish
[comment_status] => open
[ping_status] => closed
[post_password] =>
[post_name] => bt0109-homeschooling-reducks
[to_ping] =>
[pinged] =>
[post_modified] => 2014-07-07 11:08:46
[post_modified_gmt] => 2014-07-07 15:08:46
[post_content_filtered] =>
[post_parent] => 0
[guid] => http://50.57.190.158/?post_type=product&p=1308
[menu_order] => 0
[post_type] => product
[post_mime_type] =>
[comment_count] => 0
[filter] => raw
)
[product_type] => variable
)
[variation_data] => Array
(
[attribute_pa_audio-options] => mp3-download
)
[variation_has_length] =>
[variation_has_width] =>
[variation_has_height] =>
[variation_has_weight] =>
[variation_has_stock] =>
[variation_has_sku] => 1
[variation_shipping_class] =>
[variation_shipping_class_id] =>
[variation_has_tax_class] =>
[variation_has_downloadable_files] => 1
[id] => 1308
[post] => WP_Post Object
(
[ID] => 1308
[post_author] => 1
[post_date] => 2012-04-03 14:29:42
[post_date_gmt] => 2012-04-03 18:29:42
[post_content] => This audio presentation on homeschooling is a Basement Tape conversation on homeschooling.
<h2>What are The Basement Tapes?</h2>
<em>The Basement Tapes</em> are conversations between Dr. R.C. Sproul Jr., Rev. Laurence Windham, their friends and special guests, on subjects related to the “good life,” a simple, separate, and deliberate life, lived out for the glory of God and for the building of His Kingdom.
You might even say that the Basement Tapes serve to help us develop a Christian worldview. Started in 2002, we now have over #140 conversations on all areas of life that we are seeking to think biblically about so that we might take dominion over them for the King and His kingdom.
<strong>Format: Available in both CD and MP3</strong>
<strong>Length: Sixty minutes</strong>
[post_title] => Basement Tape #109: Homeschooling Redux
[post_excerpt] => It''s been 108 weeks since we last talked about the subject of homeschooling our children. Our tykes have grown into teenagers. What have we learned in the past nine years? What has changed? What remains the same is that homeschooling means discipleship; passing down your most important convictions to your children and teaching them our holy religion.
[post_status] => publish
[comment_status] => open
[ping_status] => closed
[post_password] =>
[post_name] => bt0109-homeschooling-reducks
[to_ping] =>
[pinged] =>
[post_modified] => 2014-07-07 11:08:46
[post_modified_gmt] => 2014-07-07 15:08:46
[post_content_filtered] =>
[post_parent] => 0
[guid] => http://50.57.190.158/?post_type=product&p=1308
[menu_order] => 0
[post_type] => product
[post_mime_type] =>
[comment_count] => 0
[filter] => raw
)
[product_type] => variation
[product_custom_fields] => Array
(
[_sku] => Array
(
[0] => BT0109MP3
)
[_price] => Array
(
[0] => 3
)
[_sale_price] => Array
(
[0] =>
)
[_weight] => Array
(
[0] =>
)
[_length] => Array
(
[0] =>
)
[_width] => Array
(
[0] =>
)
[_height] => Array
(
[0] =>
)
[_stock] => Array
(
[0] =>
)
[_thumbnail_id] => Array
(
[0] => 0
)
[_virtual] => Array
(
[0] => yes
)
[_downloadable] => Array
(
[0] => yes
)
[_download_limit] => Array
(
[0] =>
)
[_downloadable_files] => Array
(
[0] => a:1:{s:32:"a0a87d43e69ed9de646ba479c252c9fb";a:2:{s:4:"name";s:29:"109-Homeschooling-Reducks.mp3";s:4:"file";s:113:"http://highlandsministriesonline.org/wp-content/uploads/woocommerce_uploads/2012/04/109-Homeschooling-Reducks.mp3";}}
)
[_regular_price] => Array
(
[0] => 3
)
[_sale_price_dates_from] => Array
(
[0] =>
)
[_sale_price_dates_to] => Array
(
[0] =>
)
[_download_expiry] => Array
(
[0] =>
)
[attribute_pa_audio-options] => Array
(
[0] => mp3-download
)
)
[sku] => BT0109MP3
[downloadable_files] => a:1:{s:32:"a0a87d43e69ed9de646ba479c252c9fb";a:2:{s:4:"name";s:29:"109-Homeschooling-Reducks.mp3";s:4:"file";s:113:"http://highlandsministriesonline.org/wp-content/uploads/woocommerce_uploads/2012/04/109-Homeschooling-Reducks.mp3";}}
[downloadable] => yes
[virtual] => yes
[sale_price_dates_from] =>
[sale_price_dates_to] =>
[price] => 3
[regular_price] => 3
[sale_price] =>
[total_stock] => 0
[dimensions] =>
)
Posibles pasos a seguir Mi siguiente pensamiento, si no puedo resolver esto, es escribir un script que revise y actualice cada producto en el sitio web todas las noches (ya que la corrección temporal parece funcionar para al menos 24 nuestros). Aunque si puedo ahorrar parte de mi tiempo, prefiero no hacerlo si alguien más ha podido resolver este problema de forma permanente.
Actualización a partir del 23 de octubre de 2014
Este problema sigue ocurriendo a pesar de intentar las respuestas a continuación. Creé un complemento de registro para ayudar a rastrear la frecuencia de los mensajes agotados y, con suerte, ayudar a correlacionar el mensaje con las acciones que se lleven a cabo en el sitio web. Actualmente está personalizado para este sitio web específico, pero estoy trabajando en una versión para compartir con todos ustedes, así que incluso si no puedo encontrar la respuesta, alguien puede hacerlo.
Estaba teniendo el mismo problema con un producto que había creado recientemente. Pero para mí, la respuesta fue más simple.
Necesitaba ingresar un "Precio regular" para cada variación.
https://wordpress.org/support/topic/this-product-is-currently-out-of-stock-and-unavailable-4/
Yo había creado mis atributos previamente.
En Variaciones, para mi producto, tuve que asegurarme de que se haya seleccionado "Agregar variación". Luego hice clic en el botón "Ir".
Necesitaba crear una variación para cada una de las diferentes opciones que el atributo podría tener.
Entonces, para mis opciones de color tuve que hacer tres variaciones diferentes (una para cada opción).
Luego, tuve que hacer clic en el texto azul "Expandir" y asegurarme de que cada variación tuviera un precio normal .
(Esto también fue útil: https://docs.woocommerce.com/document/variable-product/ )
Estoy experimentando el mismo problema y creo que he encontrado el motivo. Está relacionado con la función estática sync_stock_status de WC_Product_Variable Class.
Puede arreglar un estado de stock de producto variable ejecutándolo en sus funciones.php: add_action(''wp'',function(){ $productId = 639; WC_Product_Variable::sync_stock_status(639); });
Por supuesto, esta no es una buena solución porque solo soluciona un producto en un momento determinado.
Entonces el problema parece estar ejecutando esta función en el momento correcto.
Lo interesante es que he visto el código y descubrí que el guardado de edición rápida llama a esta función y también soluciona el problema.
Otra cosa interesante es que parece que el equipo woocommerce puede haberlo arreglado para siempre, porque descubrí a través de este compromiso que están llamando a esta función ahora cuando se actualiza el producto.
Intente eliminar el producto y cree un mismo producto y pruebe que tuve el mismo problema y funcionó para mí. incluso intente reinstalar el WooCommerce 2.1.12
Podría ser un problema del producto. Intente eliminar y volver a agregar el producto o reinstalarlo.
Tuve el mismo problema y creo que lo descubrí. Utilicé el paquete CSV Import / Export para exportar todas mis variaciones. Notará que el stock se establece en 0
cuando debería tener un valor null
.
Tienes dos opciones aquí:
- Vaya a cada producto individual, haga clic en la pestaña de variaciones y amplíe cada variación, desmarcando la casilla de verificación "administrar stock":
- Puede hacer un buscar y reemplazar en la base de datos sustituyendo el valor 0 por nulo.