Estoy tratando de crear una personalizada permalink estructura que me permitirá lograr los siguientes.

  1. Tengo un custom post type llamado «proyectos»
  2. Tengo una taxonomía personalizada llamado «proyecto categoría» que se asigna a la CPT «proyectos»

Quiero que mi permalink estructura para parecerse a esto:

proyectos/categoría/nombre de proyecto

o

/%personalizado-post-tipo%/%personalizado-taxonomía%/%post-nombre%/

He sido capaz de éxito de uso /%category%/en permalinks para normal, out-of-the-box WP puestos, pero no para el CPTs.

Cómo sería la creación de un vínculo permanente que afectan a la estructura de la Url o de otras páginas? Es posible de definir una costumbre permalink estructura y restringir a un solo CPT?

Gracias

  • Sería este plugin resolver su problema? wordpress.org/plugins/custom-post-type-permalinks
  • Siempre soy reacio a usar demasiados plugins, pero definitivamente voy a darle una oportunidad! Gracias.
  • Estoy totalmente de acuerdo con usted, aunque últimamente he estado un poco más indulgentes con los que realmente básico plugins que son esencialmente sólo tomar algo de trabajo pesado de distancia de nosotros. La esperanza de que funciona para usted!
  • Como Advanced Custom Fields – la mayor WP plugin de todos los tiempos como lo que me refiero.
  • De hecho, la ACF es una necesidad absoluta para cualquier instalación de WordPress! CPTP funciona perfectamente, gracias por la sugerencia!

2 Comentarios

  1. 26

    Por suerte para ti, yo sólo tenía que hacer esto para un proyecto de un cliente. He utilizado esta respuesta en el WordPress Stackexchange como guía:

    /**
     * Tell WordPress how to interpret our project URL structure
     *
     * @param array $rules Existing rewrite rules
     * @return array
     */
    function so23698827_add_rewrite_rules( $rules ) {
      $new = array();
      $new['projects/([^/]+)/(.+)/?$'] = 'index.php?cpt_project=$matches[2]';
      $new['projects/(.+)/?$'] = 'index.php?cpt_project_category=$matches[1]';
    
      return array_merge( $new, $rules ); //Ensure our rules come first
    }
    add_filter( 'rewrite_rules_array', 'so23698827_add_rewrite_rules' );
    
    /**
     * Handle the '%project_category%' URL placeholder
     *
     * @param str $link The link to the post
     * @param WP_Post object $post The post object
     * @return str
     */
    function so23698827_filter_post_type_link( $link, $post ) {
      if ( $post->post_type == 'cpt_project' ) {
        if ( $cats = get_the_terms( $post->ID, 'cpt_project_category' ) ) {
          $link = str_replace( '%project_category%', current( $cats )->slug, $link );
        }
      }
      return $link;
    }
    add_filter( 'post_type_link', 'so23698827_filter_post_type_link', 10, 2 );

    Cuando se registra el tipo de mensaje personalizado y taxonomía, asegúrese de utilizar la siguiente configuración:

    //Used for registering cpt_project custom post type
    $post_type_args = array(
      'rewrite' => array(
        'slug' => 'projects/%project_category%',
        'with_front' => true
      )
    );
    
    //Some of the args being passed to register_taxonomy() for 'cpt_project_category'
    $taxonomy_args = array(
      'rewrite' => array(
        'slug' => 'projects',
        'with_front' => true
      )
    );

    Por supuesto, asegúrese de enjuagar las reglas de reescritura cuando hayas terminado. Buena suerte!

    • Excelente, gracias! Yo era una de prisa así que tuve que depender de un plugin (que prefiero no hacer) para hacerlo rápido. Voy a ponerlo en práctica en proyectos de futuro!
    • Alguna vez ha tratado de conseguir que esto funcione, con sub-categorías o saber cómo podría conseguir que esto funcione con sub-categorías?
    • Esto funciona; sin embargo, get_post_type_archive_link('projects') regresa con la %project_catgory% en la dirección url desde la babosa se define con él.
    • Esto no funciona con las páginas. :/ proyectos/categoría/nombre de proyecto/page/2/ resultados en 404.
    • ACTUALIZACIÓN: Corrección para la paginación se puede encontrar aquí wordpress.stackexchange.com/a/40591/13291
  2. 0

    Mientras que el registro de su tipo de mensaje personalizado utilizado slug como

    $post_type_args = array(
      'rewrite' => array(
        'slug' => 'projects',
        'with_front' => true
      )

    Puedes probar con la Configuración->enlace permanente

    hacer los padres de ese post también hacer que su enlace

Dejar respuesta

Please enter your comment!
Please enter your name here