Je sais que je peux faire
wp_untrash_post( $post_id );
Et vérifiez le statut de la publication avec
$post_status = get_post_status ( $post_id )
Je suis dans une situation où je dois extraire certains messages mais uniquement si le message lui-même n'était pas un simple brouillon
Est-il possible de vérifier quelque chose comme un état précédent d'un article mis à la corbeille?
Comme @cybmeta l'a mentionné, les informations sont stockées dans la table meta. Lorsque nous supprimons un article, la clé de méta _wp_trash_meta_status
est ajoutée avec la valeur du statut de l'article précédent ( publish , en attente , brouillon , ...).
Dans la fonction wp_trash_post()
, nous avons:
add_post_meta($post_id,'_wp_trash_meta_status', $post['post_status']);
add_post_meta($post_id,'_wp_trash_meta_time', time());
Nous pourrions donc essayer:
// Get previous post status
$status = get_post_meta( $post_id, '_wp_trash_meta_status', true );
// Only untrash if the previous status wasn't a 'draft'
if( 'draft' !== $status )
wp_untrash_post( $post_id );
supprimer uniquement une publication si son statut de publication précédente n'était pas un brouillon .
Voici un exemple de la manière dont nous pouvons ajouter une colonne triable Post Status à la corbeille du tableau de liste des publications dans le backend:
Nous pourrions alors utiliser la suppression en bloc si nécessaire.
Voici un plugin de démonstration pour le supporter:
<?php
/**
* Plugin Name: Demo Plugin
* Description: Adds the 'Previous Post Status' Column in the 'trash' post table view
* Plugin URI: http://wordpress.stackexchange.com/a/244261/26350
*/
namespace WPSE\Q244254;
add_action( 'admin_head', function()
{
// Only target the trash view on the edit.php page
if( 'trash' !== get_query_var( 'post_status' ) || ! did_action( 'load-edit.php' ) )
return;
// Let's start it here
$o = new Main;
$o->init( $GLOBALS['wpdb'] );
} );
class Main
{
private $db;
public function init( \wpdb $db )
{
$this->db = $db;
add_filter( 'manage_post_posts_columns', [ $this, 'columns'] );
add_filter( 'manage_edit-post_sortable_columns', [ $this, 'sortable_columns' ] );
add_filter( 'posts_orderby', [ $this, 'orderby' ], 10, 2 );
add_action( 'manage_post_posts_custom_column', [ $this, 'custom_column' ], 10, 2 );
}
public function columns ( $columns )
{
// Place our new custom column right after the 'title' column
$_columns = [];
foreach( (array) $columns as $key => $label )
{
$_columns[$key] = $label;
if( 'title' === $key )
$_columns['wpse_prev_post_status'] = esc_html__( 'Previous Post Status', 'mydomain' );
}
return $_columns;
}
public function custom_column( $column_name, $post_id )
{
// Display the previous post status
if ( $column_name == 'wpse_prev_post_status' )
echo get_post_meta( $post_id, '_wp_trash_meta_status', true );
}
public function sortable_columns( $columns )
{
// Make our new column sortable
$columns['wpse_prev_post_status'] = 'wpse_prev_post_status';
return $columns;
}
public function orderby( $orderby, \WP_Query $q )
{
// Implement the orderby support to our custom column
$_orderby = $q->get( 'orderby' );
$_order = 'ASC' === strtoupper( $q->get( 'order' ) ) ? 'ASC' : 'DESC';
if(
is_admin()
&& $q->is_main_query()
&& 'wpse_prev_post_status' === $_orderby
)
$orderby .= $this->db->prepare( "{$this->db->posts}.post_status %s", $_order );
return $orderby;
}
} // end class
Notez que nous ciblons ici le type de message post
.
J'espère que vous pourrez l'adapter à vos besoins, par exemple en ajoutant un filtrage de statut de post .