web-dev-qa-db-fra.com

supprimer uniquement les messages de la requête/pour chaque instruction (front end)

J'utilise ceci dans mes fonctions que je peux utiliser pour supprimer la page actuelle (type de message personnalisé appelé - seau) et tous ses enfants:

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' => 'bucket'
    );
    // 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();
    exit;
}
}

J'appelle ensuite cela dans mon thème avec cette

<?php echo delete_post(); ?>

Lorsque j'utilise cette fonction dans mon modèle de page affichant toutes mes publications, elle supprime évidemment toute la page et tous ses enfants au lieu d'être simplement une publication individuelle appelée avec une requête/pour chaque instruction.

Voici l'exemple de code de modèle que j'utilise et où ma fonction est appelée

<?php 
/*
Template Name Posts: Bucket Overview
*/
?>



<?php get_header(); ?>

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>


<div class="content">
<div class="stash-container">


<div class="main-view">

 <?php
 global $authordata, $post;
 $my_meta = get_post_meta( $id, 'connect', true);
 $portfolio_sections = array(
 'post_type'   => 'bucket',
 'category_name'      => 'Folder',
 'meta_key' => 'connect',
    'meta_value' => $my_meta,
 'orderby' => 'menu_order',
 'posts_per_page' => -1,
 'sort_column' => 'menu_order',
 'sort_order'  => 'ASC'
  );

  $sections = get_posts($portfolio_sections);
  foreach ($sections as $section) { ?>


   <ul class="things">

     <div class="category"> <i class="fa fa-folder-o" aria-   hidden="true"> </i> <?php echo $section->post_title; ?>
         (<?php $children = get_pages( array( 'child_of' => $section-  >ID, 'post_type'   => 'bucket',) ); echo count($children);?>)

  <span class="modify-folder">

  <?php echo delete_post(); ?> | edit

  </span>
  </div>


    <?php
    global $authordata, $post;
    $my_meta = get_post_meta( $id, 'connect', true);
    $portfolio_sites = array(
    'post_type'   => 'bucket',
    'category_name' => 'drop',
    'meta_key' => 'connect',
    'meta_value' => $my_meta,
    'orderby' => 'menu_order',
    'posts_per_page' => -1,
    'sort_column' => 'menu_order',
    'sort_order'  => 'ASC',
     'post_parent'      => $section->ID
     );

      $sites = get_posts($portfolio_sites);


      foreach ($sites as $site) { ?>
      <li class="sites">

       <a href="<?php echo get_the_permalink($site->ID); ?>">

      <div class="rollover"> 

    </div>
    </a>
  </li>
  <?php } ?>
  </ul>
  <?php } ?> 
  <?php endwhile; endif; ?>
  <?php get_footer(); ?>

Ainsi, vous pouvez voir le modèle ci-dessus dans la classe span - modify-folder J'appelle mon lien de suppression. Mais il supprime la page entière et pas seulement le $ section-> ID - j'ai essayé de remplacer toutes les références par get_the_id et post_id dans le fichier de fonction principal par $ section-> ID mais cela ne fonctionne pas!

S'il vous plaît aider!

Merci

1
joelybristol

Vous devez transmettre l'id de la publication que vous souhaitez supprimer en tant qu'argument de la fonction delete_post () plutôt que de l'obtenir via Global $ post dans la fonction elle-même:

<?php echo delete_post($section->ID); ?>

Ensuite, dans votre fonction delete_post (), vous pouvez utiliser l'argument transmis comme suit:

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