提交帖子后重定向到分类帖子列表。

时间:2014-04-06 作者:Roc

我可以将用户重定向回编辑。成功创建/更新帖子后的php管理页面。

但是,是否可以将它们重定向到分类术语帖子页面?这样,当用户创建帖子时,他们将被重定向到管理员帖子列表页面,该页面仅显示该帖子和具有相同分类术语的其他帖子。

非常感谢您的帮助。谢谢

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

首先请注意,一篇文章可以有多个类别,也可以没有类别,在这种情况下你会怎么做?

更新后呢?

也就是说,如果你在edit.php 并通过单击其名称来选择一个类别,您会注意到url中唯一更改的是category_name 附加到url。通过使用get_the_category 并使用add_query_arg.

我假设:

如果帖子有多个类别,请使用第一个类别edit.php 没有任何类别过滤器

  • 如果帖子更新,您将以同样的方式行事,因此:

    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);
    
    我用过\'wp_insert_post\' 具有最高优先级,因为它是保存帖子时最后一个激发的钩子。以这种方式保存通常在上运行的自定义元数据库的代码save_post, 应该可以正常工作,因为钩子是先触发的。

    然而,这方面的问题是:

    重定向后,在中仅显示一个类别时,您将不再看到“post updated”消息edit.php 过滤器乍一看不是很明显,这可能会让用户感到困惑。出于这些原因,我想分享一种正确显示消息的方法,使重定向后的编辑页面更加清晰:

    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 \'<div class="updated"><p>\';
        printf(
          __(\'Post updated. <a href="%s">View post</a>\'), esc_url( get_permalink($pid) )
        );
        echo \'</p></div>\';
      }
      $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 \'<div class="updated"><p>\';
        $all = add_query_arg( array( \'post_type\'=>\'post\' ), admin_url(\'edit.php\') );
        $f = \'%s <strong>&quot;%s&quot;</strong>. <a href="%s">%s</a>\';
        printf( $f, $cname, esc_html($term->name), esc_url($all), __(\'All Posts\') );
        echo \'</p></div>\';
      }
    });
    

  • 结束

    相关推荐

    如何在GET_POSTS Foreach循环中使用WordPress条件标记

    我有一个页面jquery tab function 输出此页面的子页面列表(Bio、Archives、Contact)。然而,我试图在foreach循环中设置一个条件,但没有任何效果。<?php // get_posts function: http://codex.wordpress.org/Template_Tags/get_posts#Examples $args = array( \'paged\' => $paged, \'post_type