it-swarm.com.de

Benutzerdefinierte Permalink-Struktur: /% Benutzerdefinierter Posttyp% /% Benutzerdefinierte Taxonomie% /% Postname% /

Ich versuche, eine benutzerdefinierte Permalink-Struktur zu erstellen, mit der ich Folgendes erreichen kann.

  1. Ich habe einen benutzerdefinierten Beitragstyp namens "Projekte".
  2. Ich habe eine benutzerdefinierte Taxonomie namens "Projektkategorie", die den CPT "Projekten" zugewiesen wird. 

Ich möchte, dass meine Permalink-Struktur so aussieht:

projekte/Kategorie/Projektname

oder

/% benutzerdefinierte Post-Typ% /% benutzerdefinierte Taxonomie% /% post-name% /

Ich konnte erfolgreich /% category%/in Permalinks für normale, einsatzbereite WP - Posts verwenden, nicht jedoch für CPTs.

Wie wirkt sich das Erstellen einer solchen Permalink-Struktur auf die URLs oder andere Seiten aus? Ist es möglich, eine benutzerdefinierte Permalink-Struktur zu definieren und auf einen einzelnen CPT zu beschränken?

Vielen Dank

20
Bruno Cloutier

Glücklicherweise musste ich dies nur für ein Kundenprojekt tun. Ich habe diese Antwort auf dem WordPress Stackexchange als Leitfaden verwendet:

/**
 * 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 );

Achten Sie beim Registrieren des benutzerdefinierten Beitragstyps und der Taxonomie darauf, die folgenden Einstellungen zu verwenden:

// 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
  )
);

Stellen Sie natürlich sicher, dass Sie die Umschreiberegeln löschen, wenn Sie fertig sind. Viel Glück!

26
Steve Grunwell

Während der Registrierung Ihres benutzerdefinierten Beitragstyps wird Slug als verwendet

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

Sie können es mit Setting-> Permalink versuchen 

Übergeordnetes Mitglied dieses Beitrags erstellen, auch Link erstellen

0
Rohit Kaushik