当插件包含连字符时,自定义POST类型单页(Single-{cpt-name})404

时间:2014-02-09 作者:drake035

我有一个叫“作者”的CPT。在一个小时的搜索之后,我发现为什么这个CPT(由模板“single author.php”管理)有404个访问单页,我意识到有些人确实有用:那些slug中没有连字符的人!

所以对于作家伏尔泰,我的网站。com/作者/伏尔泰/作品。然而,对于“亚历山大大仲马”,我的网站。com/author/alexandre-dumas/给出了一个404。如果我把这个弹头从“亚历山大大仲马”改为“亚历山大大仲马”,不加连字符,它就行了。

我需要在我的作者slug中使用连字符(否则我需要让我的客户手动编辑她创建或创建的每个作者的slug),如何做到这一点?

我的CPT声明:

function my_custom_post_author() {
    $labels = array(
        \'name\'               => _x( \'Book Authors\', \'post type general name\' ),
        \'singular_name\'      => _x( \'Book Author\', \'post type singular name\' ),
        \'add_new\'            => _x( \'Add New\', \'book author\' ),
        \'add_new_item\'       => __( \'Add New Book Author\' ),
        \'edit_item\'          => __( \'Edit Book Author\' ),
        \'new_item\'           => __( \'New Book Author\' ),
        \'all_items\'          => __( \'All Book Author\' ),
        \'view_item\'          => __( \'View Book Author\' ),
        \'search_items\'       => __( \'Search Book Author\' ),
        \'not_found\'          => __( \'No book authors found\' ),
        \'not_found_in_trash\' => __( \'No book authors found in the Trash\' ), 
        \'parent_item_colon\'  => \'\',
        \'menu_name\'          => \'Book Authors\'
    );
    $args = array(
        \'labels\'        => $labels,
        \'description\'   => \'Holds our authors specific data\',
        \'public\'        => true,
        \'menu_position\' => 4,
        \'supports\'      => array( \'title\', \'editor\', \'thumbnail\', \'excerpt\', \'comments\', \'custom-fields\'),
        \'rewrite\' => array( \'slug\' => \'book-author\',\'with_front\' => FALSE),
        \'has_archive\'   => true,
    );
    register_post_type( \'book-author\', $args );     
}
add_action( \'init\', \'my_custom_post_author\' );

function my_updated_messages_author( $messages ) {
    global $post, $post_ID;
    $messages[\'book-author\'] = array(
        0 => \'\', 
        1 => sprintf( __(\'Book Author updated. <a href="%s">View book author</a>\'), esc_url( get_permalink($post_ID) ) ),
        2 => __(\'Custom field updated.\'),
        3 => __(\'Custom field deleted.\'),
        4 => __(\'Book author updated.\'),
        5 => isset($_GET[\'revision\']) ? sprintf( __(\'Book author restored to revision from %s\'), wp_post_revision_title( (int) $_GET[\'revision\'], false ) ) : false,
        6 => sprintf( __(\'Book author published. <a href="%s">View book author</a>\'), esc_url( get_permalink($post_ID) ) ),
        7 => __(\'Book author saved.\'),
        8 => sprintf( __(\'Book author submitted. <a target="_blank" href="%s">Preview book author</a>\'), esc_url( add_query_arg( \'preview\', \'true\', get_permalink($post_ID) ) ) ),
        9 => sprintf( __(\'Book author scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview book author</a>\'), date_i18n( __( \'M j, Y @ G:i\' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
        10 => sprintf( __(\'Book author draft updated. <a target="_blank" href="%s">Preview book author</a>\'), esc_url( add_query_arg( \'preview\', \'true\', get_permalink($post_ID) ) ) ),
    );
    return $messages;
}
add_filter( \'post_updated_messages\', \'my_updated_messages_author\' );

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

如果不进行测试,我猜这与作者的名字没有任何关系,但事实是author 是内置的WordPress查询变量,并且/author/author-name/ 是作者存档的默认永久链接。更改帖子类型名称,使查询变量不再冲突,然后更改帖子类型重写slug,或在init操作中更改作者存档的默认slug:

global $wp_rewrite;
$wp_rewrite->author_base = \'blog-author\';

结束

相关推荐

如果Slug与自定义帖子标题不同,则表单操作不起作用

我面临以下情况,我创建了一个事件自定义帖子类型,并用单个事件显示这些帖子。php模板。我还在该模板中实现了一个注册表单,一切都很好。然而,我注意到,当事件的标题(而不是slug)发生更改时,提交表单将导致404(或者在我的情况下,通知找不到博客帖子)。解决方法是根据标题相应地更改slug,但我注意到这并不总是有效,尤其是当他们放置多个。。。例如,在标题中。我似乎不知道哪里出了错,这让我抓狂:(你们中的一个如何向我指出解决这个问题的正确方向:D这是我自定义帖子类型的代码/** * Flushes