web-dev-qa-db-fra.com

Obtenir uniquement les messages modifiés

J'utilise ce code pour générer un flux à partir du dernier post modifié

mysqli_query( $conn, 
    "SELECT * FROM wp_posts 
     WHERE post_status = 'publish' 
         AND post_type = 'post' 
         AND DATE(post_modified) > DATE(post_date) 
     ORDER BY post_modified DESC 
     LIMIT 50"
);

et cela fonctionne parfaitement, maintenant je dois reproduire dans un plugin WordPress et j'utilise ce code:

 $lastupdated_args = array(
    'paged'               => $paged,
    'orderby'             => 'modified',
    'ignore_sticky_posts' => '1'
);

mais dans ce cas, il montre toutes les publications commandées de ma dernière modification et pas seulement la publication modifiée.

Est-il possible de réparer?

1
user1038606

Vous pouvez utiliser le filtre posts_where:

// Add custom filter
add_filter( 'posts_where', 'wpse_modified' );

// Fetch posts
$query = new WP_Query( $lastupdated_args );

où vous pouvez définir le rappel de filtre comme suit:

function wpse_modified( $where )
{
   global $wpdb;
   // Run only once:
   remove_filter( current_filter(), __FUNCTION__ );
   // Append custom SQL
   return $where . " AND {$wpdb->posts}.post_modified} != {$wpdb->posts}.post_modified} ';
}

Bien qu’il soit pratique de pouvoir utiliser ce type de requête de date :

$args = [
    'date_query' => [
        [ 'before' => 'post_modified' ]
    ],
];

et

$args = [
    'date_query' => [
        [ 
            'column'    => 'post_modified_gmt', 
            'after'     => 'post_date_gmt', 
            'inclusive' => false 
        ]
    ],
];

C'est peut-être une idée pour un billet de base! ;-)

2
birgire
$lastupdated_args = array(
    'paged' => $paged,
    'post_status' => 'publish',
    'post_type' = 'post',
    'orderby' => 'modified',
    'ignore_sticky_posts' => '1'
);

Je crois que ceci vous aidera.

0
Bharat