Umleitung zu Taxonomie-Beitragsliste nach Beitragsübermittlung

Ich bin in der Lage, den Benutzer zurück zur Adminseite edit.php umzuleiten, nachdem sie erfolgreich einen Beitrag erstellt / aktualisiert haben.

Ist es jedoch möglich, sie auf die Taxonomie-Termpost-Seite umzuleiten? Wenn ein Benutzer einen Beitrag erstellt, werden diese auf die Seite mit der Admin-Postliste weitergeleitet, auf der nur dieser Post und andere mit demselben Taxonomiebegriff angezeigt werden.

Jede Hilfe wird geschätzt. Vielen Dank!

Solutions Collecting From Web of "Umleitung zu Taxonomie-Beitragsliste nach Beitragsübermittlung"

Beachten Sie vor allem, dass ein Beitrag mehr als eine Kategorie haben kann, auch können Beiträge keine Kategorie haben, was werden Sie in diesen Fällen tun?

Und was ist nach dem Update?

Wenn du dir die URL in der edit.php und eine Kategorie edit.php , indem du auf ihren Namen edit.php , wirst du feststellen, dass die einzige Änderung in der URL ist, dass der Parameter category_name an url angehängt wird. Sie können dies leicht tun, indem Sie die Kategorie mit get_the_category und das Argument url mit add_query_arg .

Ich nehme an, dass:

  • Wenn Post mehr als eine Kategorie hat, verwenden Sie die erste Kategorie.
  • Wenn der Post keine Kategorie hat, edit.php in die edit.php ohne einen Kategoriefilter.
  • Wenn der Poststatus “Entwurf” lautet, wird die Weiterleitung nicht ausgetriggers.
  • Wenn der Beitrag gelöscht wird, leiten Sie ihn in den Papierkorb um.
  • Wenn der Post aktualisiert wird, werden Sie auf die gleiche Weise handeln

Damit:

 add_action( 'wp_insert_post', function( $post_ID, $post, $update ) { if ( defined('DOING_AJAX') && DOING_AJAX ) return; if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return; if ( $post->post_type !== 'post' ) return; if ( in_array($post->post_status, array('draft','auto-draft','inherit') ) ) return; $url = add_query_arg( array( 'post_type'=>'post' ), admin_url('edit.php') ); if ( $post->post_status === 'trash' ) { $args = array('post_status' => 'trash', 'trashed' => '1', 'ids' => $post_ID ); $redirect = add_query_arg( $args, $url ); wp_safe_redirect( $redirect ); exit(); } $url = add_query_arg( array( 'pid' => $post_ID ), $url ); // uncomment following line to avoid redirect on post update // if ($update) return; $cats = get_the_category( $post_ID ); if ( empty( $cats ) ) { wp_safe_redirect( $url ); exit(); } $cat = array_shift( $cats ); $args = array( 'category_name' => $cat->slug, 'msg' => 'updated' ); $redirect = add_query_arg( $args, $url ); wp_safe_redirect( $redirect ); exit(); }, PHP_INT_MAX, 3); 

Ich habe 'wp_insert_post' mit der höchsten Priorität verwendet, weil es der letzte Haken ist, der beim 'wp_insert_post' ausgetriggers wird. Auf diese Weise sollte Code zum Speichern von benutzerdefinierten Metaboxen, der normalerweise auf save_post läuft, save_post funktionieren, da dieser Hook zuerst ausgetriggers wird.

Die Probleme damit sind jedoch:

  • Die Nachricht “Post aktualisiert” wird nicht mehr angezeigt
  • Wenn nach der Weiterleitung nur eine Kategorie in der edit.php der Filter auf den ersten Blick nicht sehr offensichtlich und kann die Benutzer verwirren

Aus diesen Gründen möchte ich einen Weg zu richtigen Show-Nachrichten teilen, um die Bearbeitungsseite nach der Weiterleitung klarer zu machen:

 add_action('admin_notices', function() { $screen = get_current_screen(); if ( $screen->id !== 'edit-post' ) return; $pid = (int) filter_input( INPUT_GET, 'pid', FILTER_SANITIZE_NUMBER_INT ); if ( ! $pid > 0 ) return; $msg = filter_input( INPUT_GET, 'msg', FILTER_SANITIZE_STRING ); if ( $msg === 'updated' ) { echo '

'; printf( __('Post updated. View post'), esc_url( get_permalink($pid) ) ); echo '

'; } $cat = filter_input( INPUT_GET, 'category_name', FILTER_SANITIZE_STRING ); if( ! empty($cat) ) { $term = get_term_by( 'slug', $cat, 'category' ); if ( empty( $term ) ) return; $c = get_taxonomy( 'category' ); $cname = esc_html( $c->labels->singular_name ); echo '

'; $all = add_query_arg( array( 'post_type'=>'post' ), admin_url('edit.php') ); $f = 'https://wordpress.stackexchange.com/questions/140448/redirection-to-taxonomy-posts-list-after-post-submit/%s "https://wordpress.stackexchange.com/questions/140448/redirection-to-taxonomy-posts-list-after-post-submit/%s". https://wordpress.stackexchange.com/questions/140448/redirection-to-taxonomy-posts-list-after-post-submit/%s'; printf( $f, $cname, esc_html($term->name), esc_url($all), __('All Posts') ); echo '

'; } });