web-dev-qa-db-ger.com

Beitrag vom Front-End und Anhang endgültig löschen

Gibt es eine Möglichkeit, einen Beitrag aus dem Front-End und seinen Anhängen dauerhaft zu löschen? Dies ist ein Snippet, das den Beitrag in den Papierkorb verschiebt, aber angehängte Bilder nicht entfernt (sie verbleiben auf dem Server) und den Beitrag nicht dauerhaft entfernt? Könnte jemand bitte helfen?

<?php 
$url = get_bloginfo('url');
if (current_user_can('edit_post', $post->ID)){
echo '<a class="delete-post" href="';
echo wp_nonce_url("$url/wp-admin/post.php?action=delete&post=$id", 'delete-post_' . $post- 
>ID);
echo '">Delete post</a>';
}
?>
2
jimilesku

Versuchen:

<?php if (current_user_can('edit_post', $post->ID)) echo "<a href='" . wp_nonce_url("/wp-admin/post.php?action=delete&amp;post=$id", 'delete-post_' . $post->ID) . "'>Delete post</a>" ?>

Sie können entscheiden, wann der WordPress-Papierkorb geleert werden soll, indem Sie diesen Code der Datei wp-config.php in Ihrem WordPress-Stammverzeichnis hinzufügen.

define('EMPTY_TRASH_DAYS', 1 );

Die 1 im Code bedeutet, dass Sie den Papierkorb täglich leeren möchten. Wenn Sie den Wert auf 0 setzen, wird die Papierkorbfunktion deaktiviert.

Schließlich löscht WordPress keine Bilder, wenn sie nicht mehr an eine Seite angehängt sind. Eine Erklärung finden Sie in diesem Ticket: http://core.trac.wordpress.org/ticket/12108 Das ist alles

mediendateien können auch von anderen Posts verwendet werden, weshalb sie in der Medienbibliothek gelöscht werden müssen. Wenn wir es so ändern, dass das Löschen einer Datei aus einem Beitrag sie vollständig aus dem System löscht, würde dies das vorhandene Verhalten stören und viele unbeabsichtigte Löschungen verursachen.

Wenn Sie gegen dieses Rationale vorgehen wollen, können Sie dies zu Ihrer functions.php hinzufügen:

function delete_post_children($post_id) {
    global $wpdb;

    $ids = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_parent = $post_id AND post_type = 'attachment'");

    foreach ( $ids as $id )
        wp_delete_attachment($id);
}
add_action('delete_post', 'delete_post_children');

Siehe auch Upload Janitor wenn Sie die Plug-In-Route zum Löschen nicht angehängter Bilder verwenden möchten.

2
two7s_clash

Die Datenbank muss nicht manuell aufgerufen werden, dies funktioniert auch:

add_action( 'delete_post', 'delete_post_children' );

function delete_post_children( $post_id )
{
    foreach( get_attached_media( '', $post_id ) as $attachment )

        wp_delete_attachment( $attachment->ID );
}
0
user16124