自定义POST类型的动态分类的自定义固定链接-工作,但中断其他固定链接

时间:2012-03-15 作者:Mark Rummel

我的自定义permalink和动态分类法适用于我的自定义帖子类型。然而,它打破了我所有其他的永久链接。它们在内容区域显示404错误(仍显示标题和侧栏)。

我使用以下代码为自定义帖子类型创建动态永久链接:

/*Adds Custom Permalinks for Course Segments*/
function custom_post_link($post_link, $id = 0)
{
  $post = get_post($id);

  if(!is_object($post) || $post->post_type != \'course-segment\')
  {
    return $post_link;
  }
  $course = \'course-segment\';

  if($terms = wp_get_object_terms($post->ID, \'course\'))
  {
    $course = $terms[0]->slug;
  }
  return str_replace(\'%course%\', $course, $post_link);

  return $post_link;
}

add_filter(\'post_type_link\', \'custom_post_link\', 1, 3);
我还将以下内容添加到create_post_type() 功能:

\'rewrite\' => array(\'slug\' => \'%course%\')
我从以下位置获得了执行此操作的代码:https://stackoverflow.com/questions/7723457/wordpress-custom-type-permalink-containing-taxonomy-slug.

通过简单地注释掉以下两行代码,我的旧permalinks可以工作,但我的动态permalinks当然不行:

//add_filter(\'post_type_link\', \'custom_post_link\', 1, 3);


//\'rewrite\' => array(\'slug\' => \'%course%\')
在中Settings 我的永久链接设置为%postname%.

任何关于如何让我的普通永久链接和我的动态自定义帖子类型永久链接工作的想法或见解都将不胜感激-做记号

2 个回复
SO网友:Rachel Carden

如果您运行的是WordPress 3.0.1或更高版本,我相信您的问题在于“post\\u type\\u link”过滤器声明和函数参数。

应用“post\\u type\\u link”筛选器时,它会传递以下4个参数:

apply_filters(\'post_type_link\', $post_link, $post, $leavename, $sample);
但您的函数接受$post\\u link和$id。

尝试以下调整:

function custom_post_link( $post_link, $post ) {

    if ( $post->post_type != \'course-segment\')
        return $post_link;

    $course = \'course-segment\';
    if( $terms = wp_get_object_terms( $post->ID, \'course\' ) )
        $course = $terms[0]->slug;

    return str_replace( \'%course%\', $course, $post_link );

}
add_filter( \'post_type_link\', \'custom_post_link\', 1, 2 );

SO网友:sergio

瑞秋是对的。问题不在于过滤器。完全删除它问题仍然会发生,因为%taxonomy%(带有%符号)作为自定义的post类型slug。

我尝试使用非标记(没有百分比符号),其他一切都可以,但我无法用分类法完全替换它,也就是说,它不会被同一个过滤器捕获。

所以,我不明白为什么会发生这种情况。

我不能让在permalink中显示分类法的CPT和其他帖子/页面同时工作。这是一个或另一个。

我认为这与wp在页面/子页面之前寻找taxo/postname或之前不尝试两者都返回404有关,但这对我来说太高级了。

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规则行的目的)仍然被破坏。

我的详细信息在这里。

Dynamic taxonomy in permalink made all other posts NOT FOUND?不幸的是,我之前没有发现这个问题,或者我没有发布我的问题。

任何想法都将受到欢迎

结束