it-swarm.com.de

Erhalten Sie nur geänderte Beiträge

Ich verwende diesen Code zum Generieren eines Feeds aus zuletzt geändertem Beitrag

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"
);

und es funktioniert perfekt, jetzt muss ich in einem WordPress-Plugin reproduzieren und ich benutze diesen Code:

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

in diesem Fall werden jedoch alle Posts angezeigt, die nach meiner letzten Änderung bestellt wurden, und nicht nur die geänderten Posts.

Ist es möglich zu beheben?

1
user1038606

Sie können den posts_where-Filter verwenden:

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

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

hier können Sie den Filterrückruf definieren als:

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} ';
}

Obwohl es praktisch wäre, diese Art von Datumsabfragen zu verwenden :

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

und

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

Das ist vielleicht eine Idee für ein Kernticket! ;-)

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

Ich denke, das wird dir helfen.

0
Bharat