2017-06-05 4 views
1

In meiner Anwendung muss ich ein Widget im Admin-Dashboard erstellen, das einen Abschnitt aller post_types mit der Anzahl der Beiträge von jedem von ihnen verbunden anzeigen wird .WordPress: post_type-> umschreiben ['slug'] gibt post_type zurück, nicht die Slug

Um das obige zu erreichen habe ich den folgenden Codeblock in meiner functions.php Datei:

add_action('wp_dashboard_setup', 'tp_post_counts_reference'); 

    function tp_post_counts_reference() { 
     global $wp_meta_boxes; 
     wp_add_dashboard_widget('custom_help_widget', 'Posts in all post types', 'custom_dashboard_help'); 
    } 

    function custom_dashboard_help() { 
     $types = get_post_types(); 
     foreach($types as $type) 
     { 
      if($type != 'travelog' && $type != 'package_tour' && $type != 'hotel-info') continue; 
      $typeobj = get_post_type_object($type); 

      echo '<a href="/' . $typeobj->rewrite['slug'] . '">' . $typeobj->labels->name . '</a>: ' . wp_count_posts($type)->publish . '<br />'; 
     } 
    } 

Aber $typeobj->rewrite['slug'] tatsächlich die post_type anstatt ihre entsprechenden Slug ausgibt.

Zum Beispiel: Ich habe die folgenden benutzerdefinierten Post-Typen

Travelog (name: Travelog, post_type: travelog, Slug: Reiseberichte)
Hotel Informationen (Name: Hotel Infos, post_type: Hotel-Info, slug: Hotels)

Die tatsächliche Ausgabe für

'<a href="/' . $typeobj->rewrite['slug'] . '">' . $typeobj->labels->name . '</a>: ' . wp_count_posts($type)->publish 

sind

<a href="/travelog">Travelog</a>: 6 

und

<a href="/hotel-info">Hotel</a>: 11 

, als ich erwarten, dass sie die Ausgabe:

<a href="/travelogs">Travelog</a>: 6 

und

<a href="/hotels">Hotel</a>: 11 

Bitte sagen Sie mir, was ich falsch gemacht habe :(

NB : Meine WP v ersion ist 4.7.5

+0

Vielen Dank für Ihre Antwort. Ich habe Ihre Lösung versucht, aber es gibt 'home_url()' für alle Posts zurück. Scheint wie nach https://wordpress.stackexchange.com/a/210545/109082, es gibt falsch zurück! Ich habe 'has_archive => true;' (http://www.wpbeginner.com/wp-tutorials/how-to-create-a-custom-post-types-archive-page-in-wordpress/) in meinem CPT hinzugefügt . Dann deaktiviert und reaktiviert das Plugin. Aber immer noch zeigen alle Post-Typen auf 'home_url()'. Was ist falsch gelaufen? –

+0

Hallo, bitte ignorieren Sie meine vorherige Nachricht. Ich hatte einen Tippfehler in meiner CPT-Erklärung. Ihre Lösung funktioniert tatsächlich! Danke :) –

+0

Ich habe es zu einer Antwort gemacht, um zukünftigen Besuchern zu helfen. Wenn das Problem gelöst wurde, sollten Sie die Antwort akzeptieren. –

Antwort

1

Anstatt zu versuchen, Ihre Beitragstyp-URL manuell zu erstellen, würde ich empfehlen, dass Sie stattdessen die integrierte WordPress-Funktion get_post_type_archive_link nutzen.

, die wie folgt aussehen:

function custom_dashboard_help() { 
    $types = get_post_types(); 

    // Alternate method for testing if custom type. 
    $custom_types = array('travelog', 'package_tour', 'hotel-info'); 
    foreach($types as $type) { 
     // If not a custom post type, don't render the link 
     if(! in_array($type, $custom_types)) { 
      continue; 
     } 

     $typeobj = get_post_type_object($type); 

     // Use get_post_type_archive_link function to get URL 
     echo '<a href="' . get_post_type_archive_link($type) . '">' . $typeobj->labels->name . '</a>: ' . wp_count_posts($type)->publish . '<br />'; 
    } 
}