Falta un guión en mi slug de URL de tipo de publicación personalizada

4 minutos de lectura

Avatar de usuario de Rajeev
Rajeev

Creé un nuevo tipo de publicación personalizada (transcripciones de ganancias) en WordPress usando el siguiente código. El nombre de mi tipo de publicación personalizada es “Transcripciones de ganancias” que son 2 palabras. Así que la babosa debería ser “ganancias-transcripciones”. En cambio, la URL es “transcripciones de ganancias”. ¿Que me estoy perdiendo aqui?

function custom_post_type() {
   
    // Earnings Transcripts 
    $labels = array(
        'name'                => _x( 'Earnings Transcripts', 'Post Type General Name', 'twentysixteen' ),
        'singular_name'       => _x( 'Earnings Transcripts', 'Post Type Singular Name', 'twentysixteen' ),
        'menu_name'           => __( 'Earnings Transcripts', 'twentysixteen' ),
        'parent_item_colon'   => __( 'Parent Earnings Transcripts', 'twentysixteen' ),
        'all_items'           => __( 'All Earnings Transcripts', 'twentysixteen' ),
        'view_item'           => __( 'View Earnings Transcripts', 'twentysixteen' ),
        'add_new_item'        => __( 'Add New Earnings Transcripts', 'twentysixteen' ),
        'add_new'             => __( 'Add New', 'twentysixteen' ),
        'edit_item'           => __( 'Edit Earnings Transcripts', 'twentysixteen' ),
        'update_item'         => __( 'Update Earnings Transcripts', 'twentysixteen' ),
        'search_items'        => __( 'Search Earnings Transcripts', 'twentysixteen' ),
        'not_found'           => __( 'Not Found', 'twentysixteen' ),
        'not_found_in_trash'  => __( 'Not found in Trash', 'twentysixteen' ),
    );
    $args = array(
        'label'               => __( 'Earnings Transcripts', 'twentysixteen' ),
        'description'         => __( 'Earnings Transcripts', 'twentysixteen' ),
        'labels'              => $labels,
        'supports'            => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields', ),
        'taxonomies'          => array( 'Earnings Transcripts' ),
        'hierarchical'        => false,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'menu_position'       => 5,
        'can_export'          => true,
        'has_archive'         => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'capability_type'     => 'page',
    );     
    // Registering your Custom Post Type
    register_post_type( 'Earnings Transcripts', $args );    
    
}
add_action( 'init', 'custom_post_type', 0 );    

Avatar de usuario de Manohar tk
manohar

Tienes que cambiar el

// Registering your Custom Post Type
register_post_type( 'Earnings Transcripts', $args );

Un cambio como este:

register_post_type('earnings-transcripts', $args);

La siguiente función eliminará el slug del enlace permanente

 function rf_remove_slug( $post_link, $post, $leavename ) {
  if ( 'earnings-transcripts' != $post->post_type || 'publish' != $post->post_status ) {
    return $post_link;
  }
  $post_link = str_replace( "https://stackoverflow.com/" . $post->post_type . "https://stackoverflow.com/", "https://stackoverflow.com/", $post_link );
  return $post_link;
}
add_filter( 'post_type_link', 'rf_remove_slug', 10, 3 );

La siguiente función solucionará el problema de mostrar el error 404 No encontrado en las páginas de publicación detalladas en este tipo de publicación personalizada

 function rf_parse_request( $query ) {
  if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) {
    return;
  }
  if ( ! empty( $query->query['name'] ) ) {
    $query->set( 'post_type', array( 'post', 'earnings-transcripts', 'page' ) );
  }
}
add_action( 'pre_get_posts', 'rf_parse_request' );

  • Gracias, su código funciona bien en partes y piezas. En la página de destino del tipo de publicación personalizada, funciona bien, pero me gustaría eliminar el slug de “ganancias-transcripciones” mientras veo la publicación detallada en ese tipo de publicación personalizada.

    – Rajeev

    17 de febrero de 2020 a las 6:10

  • Verifique este complemento y código de WP: kellenmace.com/remove-custom-post-type-slug-from-permalinks

    – Manohar tk

    17 de febrero de 2020 a las 6:23


  • Se eliminó Slug pero muestra Página no encontrada en Publicación detallada.

    – Rajeev

    17 de febrero de 2020 a las 6:28

  • He actualizado mi respuesta. Agregue amablemente las 2 funciones anteriores en el archivo functions.php que mencioné en la respuesta anterior.

    – Manohar tk

    17 de febrero de 2020 a las 7:09

"rewrite" => array( "slug" => "earnings-transcripts", "with_front" => true ),

Agregue este parámetro en $argsfuncionará.

  • Gracias, su código funciona bien en partes y piezas. En la página de destino del tipo de publicación personalizada, funciona bien, pero me gustaría eliminar el slug de “ganancias-transcripciones” mientras veo la publicación detallada en ese tipo de publicación personalizada.

    – Rajeev

    17 de febrero de 2020 a las 6:10

  • Mira esto: wordpress.stackexchange.com/a/204210/110795

    – Parthavi Patel

    17 de febrero de 2020 a las 6:16

  • Probé las respuestas pero no funciona. ¿Puede ser específico sobre qué respuesta debo buscar?

    – Rajeev

    17 de febrero de 2020 a las 6:28

  • Solo necesita hacer clic en el enlace, se desplazará automáticamente y lo llevará a responder, de lo que estoy hablando.

    – Parthavi Patel

    17 de febrero de 2020 a las 6:31

Un poco tarde. Espero que este sea útil para otros que enfrentan este escenario.

Cuando se trata de tipos de publicaciones personalizadas, los slugs siempre deben tener guiones bajos en lugar de guiones, ya que hay varios lugares en el núcleo de WordPress que utilizan los slugs, y eso se rompería si no se usara un guión bajo.

Puedes consultar este artículo para más detalles sobre este tema: https://premium.wpmudev.org/forums/topic/why-is-underscore-permitted-in-the-post-type-but-dash-is-disallowed/#post-505820

¿Ha sido útil esta solución?