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
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.