it-swarm.com.de

Ändern der Umleitung für die Aktualisierung von Begriffen

Jedes Mal, wenn ich einen Begriff aktualisiere, werde ich zur edit-tags.php-Seite für diese Taxonomie, der Begriffsliste, zurückgeleitet. Ist es möglich, statt zur Begriffsliste umzuleiten, stattdessen zum selben Begriff zurückzukehren, den ich gerade aktualisiert habe? Ähnlich wie beim Aktualisieren eines Beitrags kehren Sie zu demselben Beitrag zurück, den Sie gerade aktualisiert haben.

Nach dem Betrachten des Formulars Tags bearbeiten auf der Oberfläche scheint es keine Möglichkeit zu geben, die Aktion zu ändern oder zu ändern, wohin sie gehen soll, aber nach dem tatsächlichen Betrachten der URLs scheint sie basierend auf $_GET-Parametern umzuleiten. Eine Taxonomielisten-URL sieht beispielsweise folgendermaßen aus:

/wp-admin/edit-tags.php?taxonomy=taxonomy_name&post_type=type_name

Und wenn ein Begriff bearbeitet wird, wird nur die Tag-ID übergeben:

/wp-admin/edit-tags.php?action=edit&taxonomy=taxonomy_name&tag_ID=123&post_type=type_name

Ich müsste also auf der Seite zum Bearbeiten von Begriffen einen Filter finden, der dieselbe Begriffskennung enthält, die der aktuelle Benutzer bearbeitet. Wie würde ich das erreichen? Vorschläge zu Filtern?

3
Howdy_McGee

Ich stimme Ihnen zu, es ist etwas unerwartet Benutzererfahrung , wenn Sie nach der Aktualisierung eines Begriffs umgeleitet werden.

Darüber hinaus scheint es keine Fehlerbehandlung auf dem Formular selbst zu geben. Wenn Sie versuchen, Fehler zu machen, z. B. den Termnamen und den Slug zu löschen, werden keine Fehler angezeigt. Ignorieren Sie einfach Ihre Änderungen und leiten Sie weiter.

Sie können Folgendes versuchen, um nach dem Aktualisieren auf der Seite mit den Bearbeitungsbegriffen zu bleiben:

/**
 * Stay on the edit term page after updating.
 * @see http://wordpress.stackexchange.com/a/168206/26350
 */

add_filter( 'wp_redirect', 
    function( $location ){
        $mytaxonomy = 'post_tag'; # <-- Edit this to your needs!
        $args = array(
            'action'   => FILTER_SANITIZE_STRING,
            'taxonomy' => FILTER_SANITIZE_STRING,
            'tag_ID'   => FILTER_SANITIZE_NUMBER_INT,
        );
        $_inputs    = filter_input_array( INPUT_POST, $args );
        $_post_type = filter_input( INPUT_GET, 'post_type', FILTER_SANITIZE_STRING );
        if( 'editedtag' === $_inputs['action'] 
            && $mytaxonomy === $_inputs['taxonomy']
            && $_inputs['tag_ID'] > 0
        ){
            $location = add_query_arg( 'action',   'edit',               $location );
            $location = add_query_arg( 'taxonomy', $_inputs['taxonomy'], $location );
            $location = add_query_arg( 'tag_ID',   $_inputs['tag_ID'],   $location );
            if( $_post_type )
                $location = add_query_arg( 'post_type', $_post_type, $location );
        }
        return $location;
    }
);

hier müssen Sie den Wert für $mytaxonomy an Ihre Bedürfnisse anpassen.

Sie können auch einen Zurück - Link zum Formular hinzufügen, zum Beispiel:

/**
 * Add a "Go back" link to the post tag edit form.
 * @see http://wordpress.stackexchange.com/a/168206/26350
 */

add_action( 'post_tag_edit_form',
    function( $tag ) {
        $url = admin_url( 'edit-tags.php' );
        $url = add_query_arg( 'tag_ID',   $tag->term_id, $url );
        $url = add_query_arg( 'taxonomy', $tag->taxonomy, $url );
        printf( '<a href="%s">%s</a>', $url, __( 'Go back' ) );
    }
);

wo wir den {$taxonomy}_edit_form hook benutzen. Es wäre wahrscheinlich sinnvoller, den Link direkt unter dem Submit-Button oder in derselben Zeile hinzuzufügen, nicht darüber, wie wir es hier tun, aber ich konnte keinen passenden Haken dafür finden. Sie können natürlich CSS verwenden, um die Position des Links zu ändern.

3
birgire

Danke @birgire für die Lösung, ich habe den obigen Code für meine Bedürfnisse geändert. Jetzt brauchen wir keine spezielle Taxonomie oder einen Beitragstyp zu erwähnen. Stattdessen funktioniert dies für alle eingebauten und benutzerdefinierten öffentlichen Taxonomien. Ich habe es mit benutzerdefinierten Beitragstypen und Taxonomien getestet.

Kopieren Sie es einfach in die Datei functions.php für untergeordnete Themen und bearbeiten Sie einen Taxonomiebegriff oder einen eingebauten Taxonomiebegriff, z. B. zu überprüfende Kategorien oder Tags

/**
 * Stay on the edit term page after updating.
 * Work for any post type and all custom/built_in taxonomies
 */

add_filter( 'wp_redirect', 
    function( $location ){
            $args = array(
              'public'   => true,
              '_builtin' => true

            ); 
        $taxonomy = get_taxonomies($args); //get all taxonomies
        foreach ($taxonomy  as $mytaxonomy) {
            $args = array(
                'action'   => FILTER_SANITIZE_STRING,
                'taxonomy' => FILTER_SANITIZE_STRING,
                'tag_ID'   => FILTER_SANITIZE_NUMBER_INT,
            );
            $_inputs    = filter_input_array( INPUT_POST, $args );
            $_post_type = filter_input( INPUT_GET, 'post_type', FILTER_SANITIZE_STRING );
            if( 'editedtag' === $_inputs['action'] 
                or $mytaxonomy === $_inputs['taxonomy']
                or $_inputs['tag_ID'] > 0
            ){
                $location = add_query_arg( 'action',   'edit',               $location );
                $location = add_query_arg( 'taxonomy', $_inputs['taxonomy'], $location );
                $location = add_query_arg( 'tag_ID',   $_inputs['tag_ID'],   $location );
                if( $_post_type )
                    $location = add_query_arg( 'post_type', $_post_type, $location );
            }
            return $location;
        }
    }
);
0
Jamil Ahmed