it-swarm.com.de

Entfernen Sie benutzerdefinierten Posts vom Typ "Slug" aus der URL

Habe keine sinnvolle Antwort dafür gefunden. Ich bin mir der Konfliktprobleme und aller Probleme bewusst, die dies verursachen kann. Ich bin neugierig, ob es MÖGLICH ist, nicht EMPFOHLEN zu werden. Dies erfordert WP Umschreibungen, ich weiß so viel.

Angenommen, wir haben eine CPT von "Ereignissen". Ich möchte, dass die Seite eines einzelnen Ereignisses die URL http://domain.com/single-event-name und NICHT http://domain.com/events/single-event-name enthält. Irgendwelche Ideen, wie es geht?

15
Rob Bennet

So können Sie den ersten Teil des Jobs erledigen - den CPT-Slug-In-Post-Link (z. B. Typ des Nachrichtenposts) loswerden.

function df_custom_post_type_link( $post_link, $id = 0 ) {  

    $post = get_post($id);  

    if ( is_wp_error($post) || 'news' != $post->post_type || empty($post->post_name) )  
        return $post_link;  

    return home_url(user_trailingslashit( "$post->post_name" ));  
}
add_filter( 'post_type_link', 'df_custom_post_type_link' , 10, 2 );

Jetzt sollte es eine Umschreibe-Regel für 'News' geben, da du einen 404-Fehler bekommst.

Fügen Sie die Umschreiberegel wie folgt hinzu:

function df_custom_rewrite_rule() {
    add_rewrite_rule('(.*?)$', 'index.php?news=$matches[1]', 'top');
}
add_action('init', 'df_custom_rewrite_rule');

Dann müssen wir die Umschreiberegeln leeren, also gehen Sie zu Einstellungen - Permalinks und speichern Sie die Änderungen.

9
Bartosz

Sie können dieses Plugin ( http://wordpress.org/extend/plugins/remove-slug-from-custom-post-type/ ) zum Entfernen des Slugs verwenden, es funktioniert jedoch nur, wenn die Permalink-Struktur lautet "/%Anschriftname%/

4
swtshweta
function register_cpt_type() {
    register_post_type('cpt', array(
        'rewrite' => array("slug" => "/cpt", "with_front" => false),
    ));
}
add_action('init', 'register_cpt_type')

function cpt_rewrite_rule() {
    add_rewrite_rule('(.*?)$', 'index.php?cpt=$matches[1]', 'top');
}
add_action('after_theme_setup', 'cpt_rewrite_rule');

uRL neu schreiben, dann .htaccess bearbeiten

RewriteRule ^cpt/(.+)$ /$1 [R=301,L]
0
kristina childs

Sie können jederzeit "parse_request" einbinden, um zu überprüfen, ob ein benutzerdefinierter Typ mit dem angeforderten Namen vorhanden ist, und dann die query_vars entsprechend ändern. Um den Permalink zu generieren, benötigst du etwas in Anlehnung an die Antwort von @ Bartosz:

 add_filter('parse_request', "t21_parse_request" , 1, 1);

 function t21_parse_request($wbobj)
 {
      $vars = $wpobj->query_vars;
      $slug = $query_vars['pagename'];

      $posts = get_posts(array(
           "post_type" => "event",
           "post_name" => $slug
      ));

      if($posts)
      {
           //we know your "event" entry exists so we now amend the query_vars
           //first unset the 'page' and 'pagename'
           unset($query_vars['page']);
           unset($query_vars['pagename'];

           //now rebuild the query_vars
           $query_vars['post_type'] = "event"; //CPT name
           $query_vars['name'] = $slug;
           $query_vars['event'] = $slug //again - this constructs the "event=myevent" query string
      }
      else
      {
           //just return $wpobj since we know that there is no "event"
           return $wpobj;
      }
 }

Dies setzt jedoch voraus, dass Sie keine Post-Namen mit dem gleichen Namen wie ein Post-Name haben. Andernfalls wird der Post nie angezeigt, da er zuerst mit einem Ereignistyp übereinstimmt.

0
Zakalwe