永久链接中的动态分类是否找不到所有其他帖子?

时间:2012-07-23 作者:sergio

我在permalink中添加了我的分类法,而不是自定义Post类型的slug,它工作得很好。我甚至会说一切都很好,但将WP安装更改为Multisite会破坏所有其他帖子和页面(而不是CPT)。

permalinks每次都正确生成为?p=123或其他猜测的URL,因此找到了帖子信息,但没有为循环找到。

这就是我如何用分类法代替CPT的slug的原因:

1) post\\u type重写定义为%listing\\u type%,工作正常,如下所示:

\'rewrite\' => array( 
            \'slug\' => \'/%listing_type%\', 
            \'with_front\' => false,
2)和以下函数分别替换url和术语链接中的%listing\\u type%和“listing\\u type”字符串,这些字符串由wp\\u list\\u categories()生成(从url中删除CPT的名称)

  function listing_type_link_filter_function( $post_link, $id = 0, $leavename = FALSE ) {
    if ( strpos(\'%listing_type%\', $post_link) === \'FALSE\' ) {
      return $post_link;
    }
    $post = get_post($id);
    if ( !is_object($post) || $post->post_type != \'listing\' ) {
      return $post_link;
    }
    $terms = wp_get_object_terms($post->ID, \'listing_type\');
    if ( !$terms ) {
      return str_replace(\'/listing_type\', \'/\', $post_link);
    }
    return str_replace(\'%listing_type%\', $terms[0]->slug, $post_link);
  }

add_filter(\'post_type_link\', \'listing_type_link_filter_function\', 1, 3);


  function term_link_filter_function( $termlink, $term, $taxonomy ) {
    if ( strpos(\'listing_type\', $termlink) === \'FALSE\' ) {
      return $termlink;
    } else  return str_replace(\'/listing_type\', \'\', $termlink);
  }

add_filter(\'term_link\', \'term_link_filter_function\', 1, 3);
现在,我几乎可以肯定,在我把它变成多站点之前,一切都很好。我将研究如何安全地取消它(多站点的事情),并在稍后发布更新。

你知道有什么会破坏上面CPT中没有的帖子和页面吗?如果我从post\\u类型的slug中删除%s,则一切正常。

UPDATAE

我注意到其他工作示例对每个自定义permalink都有一个重写规则,所以我添加了它,瞧,帖子现在已经修复了,但页面仍然被破坏

THIS PARTIALLY WORKS (posts only)

global $wp_rewrite;
$wp_rewrite->extra_permastructs[\'listing\'][0] = "%listing_type%/%postname%";
    add_rewrite_rule("([^/]+)/([^/]+)/?$", \'index.php?post_type=listing&listing_type=$matches[1]&name=$matches[2]\', \'bottom\');
    add_rewrite_rule("([^/]+)/([^/]+)/?$", \'index.php?post_type=listing&listing_type=$matches[1]&page=$matches[2]\', \'bottom\');
上述代码(在CPT定义函数内)only fixed the posts, 但是页面(第二条add\\u rewrite\\u规则行的目的)仍然被破坏。

1 个回复
SO网友:kaiser

将重写规则添加到top, 不bottom. 每个匹配的规则都将中止该过程。因此,如果之前只有一个匹配,您的规则将被跳过。

结束