it-swarm.com.de

Wie setze ich automatisch Kategorien und deren Beschreibungen auf eine WP Seite?

Ich benutze einen Blog, um Zitate zu verfolgen, die ich für eine Abschlussarbeit verwenden möchte. Jedes Zitat ist ein Beitrag. Autoren sind Kategorien, die Eltern von Unterkategorien sind, die nach den Titeln von Büchern oder Artikeln dieses Autors benannt sind. In der Beschreibung der Buch-/Artikelunterkategorien habe ich die Veröffentlichungsinformationen angegeben, z. "Pinguin: London, 2007".

Angenommen, eine bestimmte Autorenkategorie heißt "Mill, John Stuart" (für die es vier Zitate gibt), die Buchunterkategorie "On Liberty" (für die es zwei Zitate gibt) und die Beschreibung "Bantam Classic: London, 1993" ”. Nun möchte ich eine Seite hinzufügen, die alle von mir gesammelten Quellen anzeigt und automatisch HTML-Code wie diesen ausgibt:

<p class="lit-author"><a href="../category/mill-john-stuart/">Mill, John Stuart</a> (4)</p>
<p class="lit-work"><a href="../category/mill-john-stuart/on-liberty/"><i>On Liberty<i></a>. Bantam Classic: London, 1993. (2)</p>

Dies könnte genauso gut mit <ul> s geschehen. Ich bin wirklich nur daran interessiert, die Ausgabe mit CSS zu formatieren und auf einer Seite zu haben. (Es handelt sich so ziemlich nur um den Inhalt eines Kategorien-Widgets, aber auf einer Seite sowie um die Kategoriebeschreibung.)

Wie würde ich das tun und wo müsste ich den entsprechenden Code einfügen, damit er auf einer bestimmten Seite angezeigt wird?

(WP 3.2.1, Graphen 1.4.1)

1
Peter Beattie

Zuerst müssen Sie alle Kategorien abrufen, die keine Eltern haben (Kategorien der obersten Ebene). Wir werden get_terms dafür verwenden. Begriffe abrufen gibt entweder ein leeres Array, ein WP_Error-Objekt oder ein Array von Objekten zurück, die Begriffe darstellen. Wir müssen also sicherstellen, dass unser Anruf funktioniert, bevor wir fortfahren.

<?php
// very hackish get_terms call with the 0 as a string to return top level terms
$cats = get_terms( 'category', array( 'parent' => '0' ) );
if( ! $cats || is_wp_error( $cats ) ) return;

Mit dieser Option können wir beginnen, indem wir ein container div ausgeben und dann eine foreach-Schleife starten, um alle Kategorien zu durchlaufen. Wir geben den Begriff und den Link in einem Absatz gemäß Ihrer obigen Anfrage aus.

<?php
$out = '<div id="ref-list">' . "\n";
foreach( $cats as $cat )
{
    $out .= sprintf( 
        '<p class="lit-author"><a href="%s">%s</a></p>',
        esc_url( get_term_link( $cat ) ),
        sanitize_term_field( 'name', $cat->name, $cat->term_id, 'category', 'display' )
    );

    $out .= "\n"; // add some newlines to prettify our source

Noch in unserer foreach( $cats as $cat ) -Schleife können wir nach Termkindern schleifen. Wenn wir sie finden, durchlaufen wir jedes Kind mit Link, Name und Beschreibung.

     <?php
    $children = get_term_children( $cat->term_id, 'category' );
    if( $children && ! is_wp_error( $children ) )
    {
        foreach( $children as $child )
        {
            $child = get_term( $child, 'category' );
            if( is_wp_error( $child ) ) continue;
            $out .= sprintf( 
                '<p class="lit-work"><a href="%s"><em>%s</em></a>. %s</p>',
                esc_url( get_term_link( $child ) ),
                sanitize_term_field( 'name', $child->name, $child->term_id, 'category', 'display' ),
                esc_attr( $child->description ) // sanitize_term_field adds autop, no good for this situation
            );
            $out .= "\n"; // prettifying newline
        }
    }
} // end of the foreach( $cats as $cat ) loop
$out .= "</div>\n";
return $out;

Sie können dieses gesamte Durcheinander in eine Funktion einschließen (Hinweis: Hier werden Zählungen hinzugefügt, oben vergessen).

<?php
function wpse25157_ref_list()
{
    // very hackish get_terms call with the 0 as a string to return top level terms
    $cats = get_terms( 'category', array( 'parent' => '0' ) );
    if( ! $cats || is_wp_error( $cats ) ) return;
    $out = '<div id="ref-list">' . "\n";
    foreach( $cats as $cat )
    {
        $out .= sprintf( 
            '<p class="lit-author"><a href="%s">%s</a> (%s)</p>',
            esc_url( get_term_link( $cat ) ),
            sanitize_term_field( 'name', $cat->name, $cat->term_id, 'category', 'display' ),
            sanitize_term_field( 'count', $cat->count, $cat->term_id, 'category', 'display' )
        );

        $out .= "\n"; // add some newlines to prettify our source

        $children = get_term_children( $cat->term_id, 'category' );
        if( $children && ! is_wp_error( $children ) )
        {
            foreach( $children as $child )
            {
                $child = get_term( $child, 'category' );
                if( is_wp_error( $child ) ) continue;
                $out .= sprintf( 
                    '<p class="lit-work"><a href="%s"><em>%s</em></a>. %s (%s)</p>',
                    esc_url( get_term_link( $child ) ),
                    sanitize_term_field( 'name', $child->name, $child->term_id, 'category', 'display' ),
                    esc_attr( $child->description ),
                    sanitize_term_field( 'count', $child->count, $child->term_id, 'category', 'display' )
                );
                $out .= "\n"; // prettifying newline
            }
        }
    } // end of the foreach( $cats as $cat ) loop
    $out .= "</div>\n";
    return $out;
}

Und fügen Sie einen Shortcode hinzu, um alles auf einer beliebigen Seite/einem beliebigen Beitrag anzuzeigen.

<?php
add_action( 'init', 'wpse25157_init' );
function wpse25157_init()
{
    add_shortcode( 'ref-list', 'wpse25157_ref_list' );  
}

Als Plugin: https://Gist.github.com/1196457

2
chrisguitarguy

Kopieren Sie page.php in Ihr Themenstammverzeichnis und nennen Sie es page-list-of-categories.php. Setzen Sie das Folgende an die Spitze:

<?php
/**
 * Template Name: Page Category Display
 */
?>

Irgendwo nach <?php the_title()?> Folgendes einfügen ...

<?php
$args = array('title_li' => '');
?>
<ul id="myCategories"><?php wp_list_categories($args);?></ul>

Erstellen Sie dann eine Seite und wählen Sie "Seitenkategorieanzeige" aus der Dropdown-Liste unter "Vorlage" im Feld "Seitenattribute".

Die oben angegebenen CSS-Klassen werden nicht ausgegeben, Sie können sie jedoch formatieren, da Ihre lit-work -Kategorien anscheinend immer untergeordnete Kategorien von Autoren sind. Sie können also mit ul#myCategories li auf Autoren verweisen und als ul#myCategories li li arbeiten.

Es gibt andere Optionen - die im $args-Array übergeben werden - für wp_list_categories, die Sie prüfen können.

0
Chris Carson