wake-up-neo.net

Hinzufügen von Metawerten zum Permalink

Ich habe Veröffentlichungen und möchte dem Permalink einfach Jahr und Monat hinzufügen. Derzeit werden dem Beitrag das Jahr und der Monat der Veröffentlichung als Metawert hinzugefügt. Ich habe Veröffentlichungen als benutzerdefinierten Beitragstyp eingerichtet und eine Taxonomie für den spezifischen Titel der Veröffentlichung erstellt. Ich möchte den Permalink haben:

veröffentlichungen/Veröffentlichungstitel/Erscheinungsjahr/Erscheinungsmonat/Name des Beitrags

Ich möchte einfach die Metawerte für das Veröffentlichungsjahr und den Veröffentlichungsmonat zum Permalink hinzufügen.

Bisher konnte ich das veröffentlichte Jahr und den veröffentlichten Monat abrufen und der URL hinzufügen, aber leider erhalte ich weiterhin eine 404, wenn ich versuche, auf Beiträge zuzugreifen. Ich glaube, ich mache eine falsche Wendung mit einem meiner Schritte unten ...

Jede Hilfe wäre dankbar.

Dies sind die Schritte, die ich in der folgenden Reihenfolge ausgeführt habe:

  1. Da ich der URL das Veröffentlichungsjahr und den Veröffentlichungsmonat hinzufügte, las ich, dass ich WordPress auf diese benutzerdefinierten Querystring-Variablen aufmerksam machen musste. Ich habe die folgenden Funktionen hinzugefügt, um diese benutzerdefinierten Variablen zu registrieren:

    function pubyear_register_rewrite_tag() {  
        add_rewrite_tag( '%pubyear%', '([0-9]{4})');  
    }  
    
    add_action( 'init', 'pubyear_register_rewrite_tag');
    
    function pubmonth_register_rewrite_tag() {  
       add_rewrite_tag( '%pubmonth%', '([0-9]{2}');  
    }  
    
    add_action( 'init', 'pubmonth_register_rewrite_tag');
    

2) Das Jahr und den Monat zur Permalink-Struktur hinzugefügt:

add_filter('post_type_link', 'pub_term_permalink', 10, 4);

function pub_term_permalink($permalink, $post, $leavename, $sample)
{
    if ( false !== strpos( $permalink, '%publication-title%/%pubyear%/%pubmonth%' ) ) {

     //get the publication-title
     $publicationtype = get_the_terms( $post->ID, 'publication-type' );

     //get the year of the publication
     $pubyear = date('Y', get_post_meta($post->ID, 'pub_date', true));

     //get the month of the publication
     $pubmonth = date('m', get_post_meta($post->ID, 'pub_date', true));

     $rewritecode = array(
         '%publication-type%',
         '%pubyear%',
         '%pubmonth%',
         $leavename? '' : '%postname%',
     );

     $rewritereplace = array(
         array_pop($publicationtype)->slug,
         $pubyear,
         $pubmonth,
         $post->post_name
     );

     $permalink = str_replace($rewritecode, $rewritereplace, $permalink);    

 }
    return $permalink;
}

3) Schreibregeln hinzufügen:

function pub_add_rewrite_rules() {  
    add_rewrite_rule(  '^([^/]*)/([0-9]{4})/([0-9]{2})/([^/]+)?', 'publications/index.php?pagename=$matches[3]', 'top' );  
}  

add_action( 'init', 'pub_add_rewrite_rules' );

4) Vergewissern Sie sich, dass der benutzerdefinierte Beitragstyp registriert ist und das folgende Array enthält:

'rewrite' => array
    (
            'slug' => 'publications/%publication-type%/%pubyear%/%pubmonth%',
    'with_front' => false
         ),
4
user1255062

Konnte das zum Laufen bringen. Ich dachte, ich würde aufschreiben, was wir getan haben, in der Hoffnung, dass es jemandem in Zukunft hilft (oder jemand kann mir Feedback geben, wie ich es besser verbessern kann!)

  1. Registrierte benutzerdefinierte Rewrite-Regeln

    add_action('init', 'pub_rewrite_rules');
    
    function pub_rewrite_rules()
    {
        global $wp_rewrite;
    
        $wp_rewrite->add_rewrite_tag( '%pubyear%', '([0-9]{4})', 'pubyear=');
        $wp_rewrite->add_rewrite_tag( '%pubmonth%', '([0-9]{2})', 'pubmonth=');
    }
    
  2. Permalink-Struktur erstellt

     function pub_permalink($permalink, $post, $leavename)
     {
         if ( false !== strpos( $permalink, '%publication-type%/%pubyear%/%pubmonth%' ) ) {
    
             $publicationtype = get_the_terms($post->ID, 'publication-type');
             $pubyear = date('Y', get_post_meta($post->ID, 'publication_date', true));
             $pubmonth = date('m', get_post_meta($post->ID, 'publication_date', true));
    
             $rewritecode = array(
                   '%publication-type%',
                   '%pubyear%',
                   '%pubmonth%',
                   $leavename? '' : '%postname%',
             );
    
             $rewritereplace = array(
                   array_pop($publicationtype)->slug,
                   $pubyear,
                   $pubmonth,
                   $post->post_name
             );
    
             $permalink = str_replace($rewritecode, $rewritereplace, $permalink);    
        }
        return $permalink;
    }
    
  3. Registrierte Taxonomie

  4. Registered Custom Post Type schrieb ein Array zum Umschreiben, um Folgendes einzuschließen:

     'slug' => 'publications/%publication-type%/%pubyear%/%pubmonth%',
    
  5. entleeren Sie die Schreibregeln, indem Sie auf die Seite Permalink-Einstellungen gehen und speichern oder flush_rewrite_rule ().

4
user1255062