É possível exibir revisão de postagem anterior?

Eu quero ser capaz de percorrer minhas postagens, mas para cada publicação para isso:

1) verifique se algum campo personalizado é verdadeiro ou falso.

2) se for verdade, apenas exiba os dados do post ( the_title, the_content … ).

3) se é uma exibição falsa a mesma estrutura de dados ( the_title, the_content … ), mas com a revisão permeável desta publicação.

É possível? e como?

Solutions Collecting From Web of "É possível exibir revisão de postagem anterior?"

Primeiro examinamos a function wp_get_post_autosave

É informativo ver como a function principal wp_get_post_autosave() usa a function wp_get_post_revisions() .

Ele supera todas as revisões de

 $revisions = wp_get_post_revisions( $post_id, array( 'check_enabled' => false ) ); 

e então usa:

 foreach ( $revisions as $revision ) { if ( false !== strpos( $revision->post_name, "{$post_id}-autosave" ) ) { if ( $user_id && $user_id != $revision->post_author ) continue; return $revision; } } 

para retornar a primeira revisão com um slug contendo "{$post_id}-autosave" e onde o $user_id possivelmente corresponde ao autor.

Alternativa

Agora, wp_get_post_revisions() é um invólucro para get_children() , então eu me pergunto por que tem que buscar todas as revisões para a publicação, antes de filtrar uma única. Por que não tentar buscá-lo diretamente, apenas o que é necessário? Quando tentamos, por exemplo, o seguinte (PHP 5.4+):

 $revisions = wp_get_post_revisions( $post_id, [ 'ofset' => 1, // Start from the previous change 'posts_per_page' => 1, // Only a single revision 'name' => "{$post_id}-autosave-v1", 'check_enabled' => false, ] ); 

então a posts_per_page não terá nenhum efeito. Depois de brincar com isso, consegui obter o seguinte posts_per_page com o argumento posts_per_page :

 $revisions = wp_get_post_revisions( $post_id, [ 'ofset' => 1, // Start from the previous change 'posts_per_page' => 1, // Only a single revision 'post_name__in' => [ "{$post_id}-autosave-v1" ], 'check_enabled' => false, ] ); 

Obtenha apenas a revisão anterior

Agora, podemos ajustar o acima para apenas buscar a revisão anterior, ou seja, isso não é uma gravação automática :

 $revisions = wp_get_post_revisions( $post_id, [ 'ofset' => 1, // Start from the previous change 'posts_per_page' => 1, // Only a single revision 'post_name__in' => [ "{$post_id}-revision-v1" ], 'check_enabled' => false, ] ); 

Aqui, nós segmentamos o {$post_id}-revision-v1 .

Observe aqui que usamos o v1 , mas podemos ajustar isso se necessário mais tarde.

Exemplo

Então, para finalmente responder a sua pergunta, aqui está uma sugestão:

 $show = get_post_meta( get_the_ID(), 'somekey', true ); if( $show ) { // Template part get_template_part( 'template-parts/content' ); } else { // Fetch the previous revision only $revisions = wp_get_post_revisions( get_the_ID(), [ 'ofset' => 1, // Start from the previous change 'posts_per_page' => 1, // Only a single revision 'post_name__in' => [ sprintf( "%d-revision-v1", get_the_ID() ) ], 'check_enabled' => false, ] ); if( $revisions ) { $post = reset( $revisions ); setup_postdata( $post ); // Template part get_template_part( 'template-parts/content' ); wp_reset_postdata(); } else { // Some fallback here } } 

Espero que você possa ajustá-lo ainda mais às suas necessidades!

Sim é possivel. Você pode acessar as revisões da postagem usando a function wp_get_post_revisions($post_id) . Retorna a matriz da revisão da publicação, o primeiro elemento de uma matriz é o mesmo que a versão atual da postagem, então você deve tomar os valores dos elementos do segundo.