Página única do tipo de postagem personalizada retorna erro 404


17

Eu tenho um tipo de postagem personalizado chamado slide. Possui conteúdo e alguns campos personalizados. Quero que o WP mostre o single.phptema ou single-slide.phptema quando o usuário clicar no link da página única do slide. o problema que tenho é que o WP lança um erro 404, quando quero ver a página do slide único.

aqui está o meu código em functions.php:

function create_slide_post_type() {
    $labels = array(
        'name'               => _x( 'اسلایدها', 'i2sa' ),
        'singular_name'      => _x( 'اسلاید', 'i2sa' ),
        'menu_name'          => _x( 'اسلایدها', 'i2sa' ),
        'name_admin_bar'     => _x( 'اسلاید', 'i2sa' ),
        'add_new'            => _x( 'افزودن', 'i2sa' ),
        'add_new_item'       => __( 'افزودن اسلاید جدید', 'i2sa' ),
        'new_item'           => __( 'اسلاید جدید', 'i2sa' ),
        'edit_item'          => __( 'ویرایش اسلاید', 'i2sa' ),
        'view_item'          => __( 'نمایش اسلاید', 'i2sa' ),
        'all_items'          => __( 'همه اسلایدها', 'i2sa' ),
        'search_items'       => __( 'جستجوی اسلایدها', 'i2sa' ),
        'parent_item_colon'  => __( 'اسلایدهای مادر:', 'i2sa' ),
        'not_found'          => __( 'اسلایدی پیدا نشد.', 'i2sa' ),
        'not_found_in_trash' => __( 'اسلایدی در زباله دان پیدا نشد.', 'i2sa' )
    );

    $args = array(
        'labels'             => $labels,
        'description'        => "اسلایدهای شرکت i2sa",
        'public'             => true,
        'exclude_from_search'=> true,
        'publicly_queryable' => false,
        'show_in_nav_menus'  => false,
        'menu_icon'          => 'dashicons-images-alt2',
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'slide' ),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => null,
        'supports'           => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
    );
    register_post_type( 'slide', $args );
    flush_rewrite_rules();
}
add_action( 'init', 'create_slide_post_type' );

Respostas:


41

Você deve definir seu publicly_queryableargumento ao trueregistrar seu tipo de postagem personalizado.

Tome nota : adicione flush_rewrite_rules(), atualize a página uma ou duas vezes e remova-a imediatamente. Você não deve manter, a flush_rewrite_rules()menos que esteja de acordo com as disposições do código.

como é uma operação cara, ela só deve ser usada quando for absolutamente necessária


1
Uau, isso funcionou aqui também. Isso foi completamente não óbvio. Obrigado!
Toby Deshane

Trabalhou para mim! Obrigado!
JamesHoux

Sim! Finalmente, depois de fazer as duas coisas funcionou.
Eric

16

Libere a regra de reescrita no painel -> Configurações-> página Permalink. Clique no botão Salvar e verifique a página de detalhes do slide. Isso vai funcionar agora. Caso contrário, você pode escrever esse código flush_rewrite_rules()em sua create_slide_post_type()função. Veja o Codex


2
Clicar no botão Salvar em Permlinks funcionou para mim. Depois que mudei o site para um servidor de produção, todos os links personalizados do tipo de postagem estavam quebrando. Isso consertou. Obrigado!
cbloss793

+1 Clicar em Salvar no Permalinks também funcionou para mim.
MarsAndBack

Salvar os trabalhos permalinks. Mas, por favor, não adicione flush_rewrite_rules()após as register_post_type()chamadas no código de produção (ou seja, dentro create_slide_post_type). Use o gancho de ativação do plug-in ou um valor de opção para determinar se você adicionou um novo tipo de postagem
Philipp

6

Atualize seus permalinks. Vá para Admin-> Configurações-> Permalinks e clique em Salvar. Ele atualiza seus permalinks e deve ajudar, especialmente se você estiver alterando a reescrita ('rewrite' => array ('slug' => 'slide'))


1

Você deve definir o seguinte no seu apache do host virtual:

    <Directory /var/www/html/wordpress>
            AllowOverride All
    </Directory>

Atualize seus permalinks: wp-admin-> settings-> permalinks. Isso funcionou para mim.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.