自定义POST类型固定链接提供404

时间:2011-02-15 作者:onetrickpony

我在为自定义帖子类型设置永久链接时遇到问题。下面是我的init函数的代码:

register_post_type(\'topic\',
  array(
   ...
   \'hierarchical\' => true,
   \'query_var\' => true,
   \'rewrite\' => false,
   ...
  ));

if(get_option(\'permalink_structure\')!= \'\'):
  global $wp_rewrite;

  $wp_rewrite->add_rewrite_tag(\'%topic%\', \'(.+?)\', \'topic=\');
  $wp_rewrite->add_permastruct(\'topic\', \'%forum%/%topic%/\', false, EP_PERMALINK);
endif;
基本上,我正试图以自己的方式设置permalinks,因为我想在帖子标题之前附加一个自定义的分类术语。

而不是:topic/whatever

使用:general-forum/sub-forum/whatever

这是更改链接的功能,它似乎工作正常:

add_filter(\'post_type_link\', \'topic_link\', 10, 4);
function topic_link($link, $post){
  if($post->post_type != \'topic\') return $link;
  global $wp_post_types;
  $terms = get_the_terms($post->ID, \'forum\');
  if(!is_wp_error($terms) && !empty($terms)):
    usort($terms, \'_usort_terms_by_id\');
    $forums = $terms[0]->slug;
    if(!empty($terms[0]->parent)):
      $parent_item = $terms[0]->parent;
      while(!empty($parent_item)):
        $parent = get_term($parent_item, \'forum\');
        if(!is_wp_error($parent) && !empty($parent))
        $forums = $parent->slug.\'/\'.$forums;
        $parent_item = empty($parent->parent) ? false : $parent->parent;
      endwhile;
    endif;
  endif;
  return str_replace(\'%forum%\', $forums, $link);
}
所以修改后的URL显示得很好,唯一的问题是我得到了一个404错误:)我在初始化代码中做错了什么?

LE: “论坛”分类法:

register_taxonomy(
  \'forum\',
    array(\'topic\', \'reply\'),
    array(
      \'public\' => true,
      \'name\' => _a(\'Forums\'),
      \'singular_name\' => _a(\'Forum\'),
      \'show_ui\' => true,
      //\'show_tagcloud\' => true,
      \'show_in_nav_menus\' => true,
      \'hierarchical\' => true,

      \'labels\' => array(
        \'name\' => _a(\'Forums\'),
        \'singular_name\' => _a(\'Forum\'),
        \'search_items\' => _a(\'Search Forums\'),
        \'popular_items\' => _a(\'Popular Forums\'),
        \'all_items\' => _a(\'All Forums\'),
        \'parent_item\' => _a(\'Parent Forum\'),
        \'parent_item_colon\' => _a(\'Parent Forum:\'),
        \'edit_item\' => _a(\'Edit Forum\'),
        \'update_item\' => _a(\'Update Forum\'),
        \'add_new_item\' => _a(\'Add New Forum\'),
        \'new_item_name\' => _a(\'New Forum Name\'),
      ),
      \'query_var\' => true,
      \'rewrite\' => array(\'slug\' => \'forums\', \'with_front\' => false, \'hierarchical\' => true),
      //\'update_count_callback\' => \'my_custom_count_callback\',
  )
);

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

我的插件自定义Post Permalinks为您做了这样的事情:

http://wordpress.org/extend/plugins/custom-post-permalinks

如果您想使用自己的解决方案,我需要更多的信息,例如论坛分类的注册码。

只是猜测一下,我认为论坛的regex与重写引擎的主题的regex看起来完全相同。

编辑查看您的代码,看起来您正在使用3.1。这个$args[\'rewrite\'][\'hierarchical\'] 3.0中没有用于分类的位。基本上,该参数所做的是更改%forum% 标记自([^/])(.+?). 这意味着WordPress的重写引擎首先获得与此正则表达式的匹配:

 @/(.+?)/(.+?)/?$
比如/generic-forum/specific-forum/specific-topic, 将解析为:

index.php?forum=generic-forum&topic=specific-forum/specific-topic
要测试这是否真的是导致404的原因,请更改分类法的重写参数,以便[\'rewrite\'][\'hierarchical\'] 未设置或设置为false,刷新重写规则,并修改您的主题链接函数,以不向链接添加父链接;然后测试新链接是否有效。

如果这是问题的原因,有几种方法可以解决。最简单的方法是在Per马斯truct中添加一点纯文本,如下所示:%forum%/topic/%topic%. 这将为您提供如下链接:/general-forum/sub-forum/topic/whatever. 另一种方法是添加另一个重写标记,如下所示:

$wp_rewrite->add_rewrite_tag( \'%post_type_topic%\', \'(topic)\', \'post_type=\' );
然后将permastruct更改为\'%forum%/%post\\u type\\u topic%/%topic%\'。

结束

相关推荐

curl problem or permalinks

我刚刚配置了我的VPS,我使用的是Centos,一切都很好,但如果我将永久链接设置为自定义结构,然后接受主页,没有帖子出现,它会显示404页,我想这是因为我没有启用curl,但我不知道我的php在哪里。我的centos中的ini文件?好的,我的卷曲被启用了,我检查过了phpinfo(); 这里是URLhttp://74.117.158.182/info.php但如果我在我的wordpress中设置了永久链接,那么接受主页,所有都会给我404页,你可以在这个URL上查看http://mbas.co.in如果