Lorsque quelqu’un appuie sur Publier ou Mettre à jour à partir de l’éditeur de blocs dans un CPT, je souhaite qu’il soit redirigé vers la page de liste CPT. (Les utilisateurs modifient généralement plusieurs CPT à la fois, ce qui leur évitera une étape – et les empêchera également d’appuyer plusieurs fois sur Mettre à jour car ils ne savent pas si leurs modifications ont été enregistrées.)
J’ai essayé deux crochets différents :
À partir d’une question de 2013, redirect_post_location
:
add_filter( 'redirect_post_location', 'wpse_124132_redirect_post_location' );
function wpse_124132_redirect_post_location( $location ) {
if ( isset( $_POST['save'] ) || isset( $_POST['publish'] ) )
return admin_url( 'edit.php?post_type=mycptslug' );
return $location;
}
(Je me demande si cela n’affecte que les publications principales puisque le crochet a “post” dans son nom? Il est presque non documenté. Qu’il ait changé depuis 2013 ou qu’il ne fonctionne tout simplement pas avec le nouvel éditeur, il n’a pas été redirigé.)
Et d’après ma propre connaissance du save_post
accrocher:
add_action( 'save_post', 'wpse_redirect_to_dashboard', 40, 3 );
function wpse_redirect_to_dashboard( $post_id, $post, $update ) {
global $_POST;
// Since save_post runs 4 times, make sure this is the final run
if( count( $_POST ) > 0 && true === $update && 'mycptslug' === $post->post_type ) {
wp_redirect( admin_url( 'edit.php?post_type=mycptslug' ) ); exit;
}
}
(j’ai confirmé le if
condition fonctionne comme prévu – j’ai temporairement enregistré un message de réussite dans un fichier texte, et il réussissait une fois à chaque fois que j’appuyais sur Mettre à jour dans l’éditeur – mais il ne redirigeait pas. J’ai également essayé de rediriger vers d’autres URL au cas où le admin_url()
partie ne fonctionnait pas mais toujours pas de redirection.)
Malheureusement, aucun de ces éléments ne fonctionne avec l’éditeur de blocs. L’utilisateur reste dans l’Éditeur après la mise à jour. Existe-t-il un autre moyen, comme lors de l’enregistrement CPT ou d’un autre crochet, pour envoyer avec succès l’utilisateur sur son chemin après avoir effectué des modifications ?
Sur la base de la réponse de cjbj, j’ai ce code mis à jour – mais il ne redirige toujours pas. Je ne sais pas trop ce que signifie le chargement tardif ou comment m’assurer que cela se déclenche après l’appel de sauvegarde ajax. (Cela fonctionne pour n’importe quel type de publication cependant):
function wpse_redirect_to_post_list() {
?>
<script>
// Get post type from hidden input
let postType=document.querySelector('form.metabox-base-form input#post_type').value;
// On "publish / update / submit changes" button click, redirect to cpt listing
jQuery( document ).ready( function( $ ) {
var url="/wp-admin/edit.php?post_type=" + postType;
$( '.editor-post-publish-button__button' ).click( function() {
window.location.href = url;
});
});
</script>
<?php
}
add_action( 'admin_print_footer_scripts', 'wpse_redirect_to_post_list' );