Matías Wegtun
Estaba intentando lo siguiente:
cuando se elimina la página de un producto (permanentemente), también debe eliminar: la galería del producto y la imagen del producto que se adjuntan a la publicación.
Probé la solución que encontré en:
https://wordpress.stackexchange.com/questions/109793/delete-associated-media-upon-page-deletion
Pero no funcionó para mí.
Aunque esta es una vieja pregunta, la dejaré aquí en caso de que alguien la esté buscando en el futuro.
Dado que desea eliminar imágenes de productos, puede probar estas funciones ordenadas y prácticas de woocommerce para obtener identificaciones de archivos adjuntos.
Algo como esto:
add_action( 'before_delete_post', 'delete_product_images', 10, 1 );
function delete_product_images( $post_id )
{
$product = wc_get_product( $post_id );
if ( !$product ) {
return;
}
$featured_image_id = $product->get_image_id();
$image_galleries_id = $product->get_gallery_image_ids();
if( !empty( $featured_image_id ) ) {
wp_delete_post( $featured_image_id );
}
if( !empty( $image_galleries_id ) ) {
foreach( $image_galleries_id as $single_image_id ) {
wp_delete_post( $single_image_id );
}
}
}
Funciona bien para mí.
-
Estoy aquí desde el futuro quería decir GRACIAS!! Agregando este código en
wp-includes/functions.php
¡¡Hizo el truco!!– Mahmud Eidarous
7 julio 2020 a las 18:45
-
NO hagas lo que hizo @Mahmoud Eidarous. NUNCA edite los archivos principales de WordPress.
– Spyros
21 oct 2020 a las 21:05
-
bueno, @Spyros … al menos podrías sugerir una mejor respuesta.
– Mahmud Eidarous
11 de noviembre de 2020 a las 23:09
-
@MahmoudEidarous tienes razón. NO hagas lo que sugiere Mahmoud. Nunca edite los archivos principales de WordPress. Si desea agregar un código personalizado, agréguelo a su tema personalizado, tema secundario o complemento personalizado.
– Spyros
12 de noviembre de 2020 a las 12:00
-
@Spyros tiene toda la razón, editar archivos WP básicos no es el camino a seguir. Para implementar de manera segura y correcta una funcionalidad como esta, la forma “más fácil” es agregar el código al archivo functions.php de su tema secundario. 🙂
– chopra
7 de septiembre a las 8:22
add_action("before_delete_post","wdm_delete_post_images",10,1);
function wdm_delete_post_images($post_id)
{
global $wpdb;
$args = array(
'post_parent' => $post_id,
'post_type' => 'attachment',
'numberposts' => -1,
'post_status' => 'any'
);
$childrens = get_children( $args);
if($childrens):
foreach($childrens as $attachment):
wp_delete_attachment( $attachment->ID, true );
$wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE post_id = ".$attachment->ID);
wp_delete_post($attachment->ID,true );
endforeach;
endif;
}
-
Si está dando una respuesta en forma de código, intente explicarlo y no solo dar el código de esta manera.
– Izukani
25 de marzo de 2016 a las 22:18
puedes intentar lo siguiente:
add_action('after_delete_post','wdm_delete_post_images',10,1);
function wdm_delete_post_images($post_id)
{
$featured_image_id = get_post_meta($post_id,'_thumbnail_id',true);
$image_galleries_id = get_post_meta($post_id,'_product_image_gallery',true);
if(!empty($featured_image_id))
{
wp_delete_post($featured_image_id);
}
if(!empty($image_galleries_id))
{
$image_galleries_array = split(',',$image_galleries_id);
foreach($image_galleries_array as $single_image_id)
{
wp_delete_post($single_image_id);
}
}
}
Esto eliminará las imágenes cuando el producto se elimine de forma permanente.
-
Especificó que solo quería esto para los productos, así que agregué un cheque para el tipo de publicación del producto.
– Pelmered
12 de julio de 2014 a las 9:58
-
Todavía no funcionó para mí, busqué en la base de datos y reemplacé “_thumbnail_id” con “_wp_attached_file”. ¿Puede decirme qué debería ir en $key o “key” gracias?
– Matthias Wegtun
14/07/2014 a las 10:30
Paso 1: Inicie sesión en su PhpMyAdmin | Si tiene más de una base de datos, asegúrese de hacer clic en la base de datos correcta. Si no está seguro porque tiene más de una instalación de WordPress en el mismo dominio, abra una tabla y busque “wp_options”, podrá ver la URL del sitio web que está modificando.
Paso 2: Ejecute la instrucción SQL ==> en WP_POST
Si está en la base de datos correcta, haga clic en la pestaña SQL en la parte superior derecha. Puede estar vacío o tener una declaración SQL allí de un comando anterior.
DELETE relations.*, taxes.*, terms.*
FROM wp_term_relationships AS relations
INNER JOIN wp_term_taxonomy AS taxes
ON relations.term_taxonomy_id=taxes.term_taxonomy_id
INNER JOIN wp_terms AS terms
ON taxes.term_id=terms.term_id
WHERE object_id IN (SELECT ID FROM wp_posts WHERE post_type="product");
DELETE FROM wp_postmeta WHERE post_id IN (SELECT ID FROM wp_posts WHERE post_type="product");
DELETE FROM wp_posts WHERE post_type="product";
Pruébelo una vez, no necesita más código para eliminar el producto.
Puede agregar este código en un archivo nuevo y colocarlo en el directorio raíz de wordpress.
include('wp-load.php');
function delete_post($sku)
{
global $wpdb;
$result_post = $wpdb->get_results ( "SELECT `ID` FROM `wp_posts` WHERE `post_name` LIKE CONCAT('%',".$sku.", '%')" );
for($q=0;$q<count($result_post);$q++)
{
wp_delete_post($result_post[$q]->ID,true); // wp_delete_post full product delete with its all images
}
}
delete_post($sku);