修改术语更新重定向

时间:2014-11-11 作者:Howdy_McGee

每当我更新一个术语时,它当前会将我重定向回edit-tags.php 该分类法的第页,术语列表。是否可以不重定向到术语列表,而是将我带回我刚刚更新的同一术语?类似于更新帖子会让你回到刚才更新的帖子。

在查看Edit Tags Form 表面上看,似乎没有办法修改操作或更改它的位置,但在实际查看URL后,它似乎会根据URL重定向$_GET 参数。例如,分类列表url如下所示:

/wp-admin/edit-tags.php?taxonomy=taxonomy_name&post_type=type_name
每当编辑一个术语时,它只会传递“标记”ID:

/wp-admin/edit-tags.php?action=edit&taxonomy=taxonomy_name&tag_ID=123&post_type=type_name
因此,我需要在编辑术语页面上找到一个过滤器,该过滤器将传入当前用户正在编辑的相同术语ID。我将如何实现这一目标?过滤器建议?

2 个回复
最合适的回答,由SO网友:birgire 整理而成

我同意你的看法,当你在更新一个术语后被重定向时,这有点出乎意料。

此外,表单本身似乎没有错误处理,如果您试图犯一些错误,例如删除术语名称和slug,它不会显示任何错误,只需忽略您的更改并重定向即可。

更新后,您可以尝试以下操作以保持在同一编辑术语页面上:

/**
 * 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;
    }
);
您必须修改$mytaxonomy 满足您的需求。

您可能还想向表单添加一个返回链接,例如:

/**
 * 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\' ) );
    }
);
我们使用{$taxonomy}_edit_form 钩将链接直接添加到submit按钮下方,或者在同一行中,而不是像我们在这里所做的那样添加到上面,可能更有意义,但我找不到任何合适的挂钩。当然,您可以使用CSS来更改链接的位置。

SO网友:Jamil Ahmed

感谢@birgire提供的解决方案,我已根据需要修改了上述代码。现在,我们不需要提及特定的分类法或post类型,相反,这将适用于所有内置和自定义公共分类法。我已经用自定义帖子类型和分类法对其进行了测试。

只需在子主题函数中复制它。php并编辑任何分类术语或内置的分类术语,例如要检查的类别或标记

/**
 * 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;
        }
    }
);

结束

相关推荐

使用自定义字段对GET_TERMS进行排序

我有一个“crb\\U issues”的自定义分类法,它有一个与之关联的自定义字段,即“issue\\U date”,它为每个术语输出一个日期值,看起来很像“20140601”yearmonthday。我正在尝试使用get\\u terms输出所有分类法术语,并按该自定义字段对它们进行排序。下面是我一直在编写的代码,它可以很好地输出术语名称和“issue\\u date”的值。但我很难通过自定义字段获得要排序的输出。$args = array( \'meta_key\'