web-dev-qa-db-fra.com

Supprimer tous les enfants lorsque le parent est supprimé - frontend

J'ai cette fonction que j'utilise pour activer la suppression de la page de garde qui fonctionne bien

function delete_post(){
global $post;
$deletepostlink= add_query_arg( 'frontend', 'true',   get_delete_post_link( get_the_ID() ) );
if (current_user_can('edit_post', $post->ID)) {
    echo       '<span><a class="post-delete-link" onclick="return  confirm(\'Are you sure to delete?\')" href="'.$deletepostlink.'">Delete this </a></span>';
}
}

//Redirect after delete post in frontend
add_action('trashed_post','trash_redirection_frontend');
function trash_redirection_frontend($post_id) {
if ( filter_input( INPUT_GET, 'frontend', FILTER_VALIDATE_BOOLEAN ) ) {
    wp_redirect( get_option('siteurl').'/' );
    exit;
}
}

Et puis j'utilise ceci est mon fichier de modèle pour le bouton

<?php echo delete_post(); ?>

Ce que je cherche à faire, c’est que lorsqu’un utilisateur supprime une page du front-end, il supprime également (ou passe à la corbeille) tout ce que le parent a pour enfants?

Merci

1
joelybristol

Eh bien, question intéressante. Dans la mesure où j'ai effectué des recherches, les hooks sont appelés lors de la suppression de post, l'identifiant de post supprimé étant défini comme paramètre. Au moment de supprimer une page parent, cela fonctionne bien, mais lorsque vous associez une fonction à trashed_post pour supprimer la page enfant, cela ne fonctionnera pas car chaque fois qu'il obtiendra l'identifiant de publication supprimé, il s'agira ici de l'identifiant de celui récemment supprimé. page enfant. Donc, cela ne fonctionnera pas comme prévu.

Maintenant, venez à la solution. Ici, j'ai réécrit vos fonctions avec une commande SQL pour changer le statut de publication des pages enfants en trash-

function delete_post(){
    global $post;
    $deletepostlink= add_query_arg( 'frontend', 'true',   get_delete_post_link( get_the_ID() ) );
    if (current_user_can('edit_post', $post->ID)) {
        echo '<span><a class="post-delete-link" onclick="return  confirm(\'Are you sure to delete?\')" href="' . $deletepostlink . '">Delete this </a></span>';
    }
}

//Redirect after delete post in frontend
add_action('trashed_post','trash_redirection_frontend');
function trash_redirection_frontend($post_id) {
    if ( filter_input( INPUT_GET, 'frontend', FILTER_VALIDATE_BOOLEAN ) ) {
        $args = array(
            'posts_per_page' => -1,
            'order'=> 'ASC',
            'post_parent' => $post_id,
            'post_type' => 'page'
        );
        // Filter through all pages and find Portfolio's children
        $children = get_children( $args );
        global $wpdb;
        foreach($children as $child){
            $childs[$child->ID] = $child->ID;
        }
        $sql = "UPDATE {$wpdb->posts} SET post_status = 'trash' WHERE ID IN (" . implode( ', ', $childs ) . ")";
        $wpdb->query($sql);
        wp_redirect( get_option('siteurl').'/' );
        exit;
    }
}

J'espère que ça vous aidera.

1
CodeMascot