2017-07-05 3 views
-1

Ich habe benutzerdefinierte Post-Typen Independet:benutzerdefinierte Post-Typen verknüpfen Hierarchie

  1. Kurs
  2. Lektion

So ein Kurs kann viel Lektion hat und eine Lektion in vielen Kursen verwendet werden. Es ist eine m: n-Beziehung.

Jetzt habe ich Inhalt, der nur auf der Lektionsseite sichtbar sein sollte, wenn es von einem bestimmten Kurs aus betrachtet wird.

Eigentlich ist die Link-Struktur wie folgt aus:

  1. Zum Kurs: example.org/my-first-course
  2. Ich sehe alle Lektionen, die im Zusammenhang mit diesem Kurs
  3. Click auf einer Lektion. Linkstruktur ist: example.org/great-lesson

Mein Problem in diesem Stadium ist, dass ich nicht weiß, von welchem ​​Kurs der Lektion, die ich genannt.

Eines, was ich tun kann, ist, den Kurs-ID als GET-Parameter auf den Link zu befestigen: example.org/great-lesson/?course_id=123

Aber ich möchte einen Link haben mehr Struktur wie folgt aus: example.org/my-first-course/great-lesson

Wie kann ich das tun?

. :: UPDATE: LÖSUNG ::.

Hier ist meine Lösung, vielleicht wird es jemandem helfen.

Wenn Sie "add_rewrite_rule" verwenden, vergessen Sie nicht, den Slug (slug-custom-post-type) für Ihren benutzerdefinierten Post-Typ und die Abfrage var (cpt-query-var) zu ändern.

Ich habe versucht, index.php?name=$matches[1] zu verwenden, aber es wird zum benutzerdefinierten Beitragstyp umleiten und alle anderen Informationen in der URL werden verloren gehen. Daher ist es wichtig, stattdessen den benutzerdefinierten Abfragetyp var zu verwenden.

Um den 'Kurs' greifen Sie auf die get_query_var Funktion verwenden: echo get_query_var('course', '');

function my_rewrite_rules() { 
    add_rewrite_rule('^slug-custom-post-type/([^/]*)/?', 'index.php?cpt-query-var=$matches[1]&course=$matches[2]', 'top'); 
} 

add_action('init', 'my_rewrite_rules'); 

function my_query_vars($qvars) { 
    $qvars[] = 'course'; 
    return $qvars; 
} 

add_filter('query_vars', 'my_query_vars'); 

Antwort

0

Ich glaube, Sie verwenden sollten,

example.org/great-lesson/my-first-course 

statt

der Verwendung
example.org/my-first-course/great-lesson 

wie die great-lesson wird statisch sein h Hier und die id oder slug ist dynamisch, die detaillierte Kurs/Lektion zeigt.

und benutzerdefinierte hinzuzufügen Regel umschreiben Sie verwenden können,

function custom_rewrite_basic() { 
    add_rewrite_rule('^great_lesson/(.*)', 'index.php?page_id=$matches[1]', 'top'); 
} 
add_action('init', 'custom_rewrite_basic'); 

dann die slug von url bekommen und Code schreiben Sie es nach. Lesen Sie mehr über add_custom_rule

+0

Danke Rohan! Ich überprüfe die Rewrite-API. Aber wenn ich es wie in Ihrem Beispiel mache, dann füge ich jeder Lektion eine Rewrite-Regel hinzu. Es gibt über 700 Lektionen ... – mcswizz

+0

So können Sie Lektion als statisch verwenden und versuchen Regex '^ Lektion/([^ /] *)/([^ /] *)' und übergeben Sie es auf 'index.php? Page_id = 1 & lection = $ matches [1] & course = $ mathes [2] 'beim Durchsuchen eines Kurses. Und wenn Sie nur die Lektion durchsuchen, entfernen Sie den zweiten Parameter. –