it-swarm.com.de

the_author_posts_link () für Autoren benutzerdefinierter Beitragstypen

Ich habe sowohl reguläre Blog-Posts als auch einen benutzerdefinierten Post-Typ in einem Blog. Die Seitenvorlage zeigt den Link des Autors. Wenn Sie auf diesen Link klicken, um einen Autor zu finden, der Beiträge verfasst hat, werden auf dieser Seite (Blog/Autoren/Herr-Autor) die erwarteten Bio-Informationen und eine Liste der Beiträge des Autors angezeigt.

Wenn Sie jedoch einen Benutzer erstellen, der ein Autor ist, der jedoch nur den benutzerdefinierten Beitragstyp und keine regulären Beiträge verfasst hat, wird der Link von the_author_posts_link () generiert (der immer noch der richtige Link ist: blog/authors/mr-author). zeigt eine nicht ausgefüllte Seite an (dh: die Felder sind alle leer, und die Auflistung der Beiträge ist die vollständige Liste aller Beiträge für alle Autoren).

Offensichtlich erhalten wir nicht die richtigen Daten in den globalen $ authordata. Aber warum? author.php verwendet Standardvorlagen-Tags wie get_the_author_meta('display_name'), um Autoreninformationen anzuzeigen, aber all dies zeigt leere Ergebnisse für einen Autor an, der keine Posts hat.

Ich bin gerade dabei, den Kern zu durchforsten, um herauszufinden, wo und wann $ authordata gefüllt wird, um zu sehen, ob es mit einem bestimmten Beitragstyp verknüpft ist, der vorhanden ist, aber bisher nichts Nützliches erbracht hat. Hat jemand das schon mal erlebt?

EDIT: LÖSUNG AUF DER GRUNDLAGE DER ANTWORT VON CHIP

add_action('pre_get_posts', 'hdb_add_custom_type_to_query');

function hdb_add_custom_type_to_query( $notused ){
     if (! is_admin() ){
        global $wp_query;
        if ( is_author() || is_home() ){
            $wp_query->set( 'post_type',  array( 'post', CUSTOM_TYPE ) );
        }
     }
}

Angenommen, Sie haben irgendwann die Konstante CUSTOM_TYPE definiert, wahrscheinlich, wenn Sie den benutzerdefinierten Beitragstyp deklarieren.

5
Tom Auger

Ich glaube, das Problem ist, dass die Standardabfrage nur nach post post-type abfragt. ( Siehe verwandte WPSE-Frage hier. )

Daher müssen Sie wahrscheinlich die Abfrage in Ihrer author.php-Vorlagendatei so ändern, dass alle relevanten Post-Typen in der Abfrage enthalten sind.

4
Chip Bennett

Die einfachere Möglichkeit, dies zu tun, besteht darin, Ihrem benutzerdefinierten Beitragstyp die Unterstützung des Autors hinzuzufügen, während Sie den neuen Beitrag registrieren

'supports' => array(
                        'title',
                        'editor',
                        'thumbnail',
                        'post-formats',
                        'author', 
                        ),
1
c24b

Diese Problemumgehung hat das Problem für mich gelöst, aber ich fühle mich ein wenig schmutzig. Ich denke Chip ist auf das Geld mit der Tatsache, dass, wenn wir die Post Globals mit the_post () bevölkern, nur ist unter Berücksichtigung der tatsächlichen ‚Stellen‘, also die $ authordata global nicht belegt ist immer (heck, NICHTS bevölkert wird immer).

Seltsamerweise (oder auch nicht) gibt get_queried_object () genau die gleiche Struktur wie $ authordata zurück. Das folgende, in authors.php eingefügte Snippet erfüllt also meine Erwartungen. Offensichtlich funktioniert dies nur auf einer Autorenarchiv-Vorlagenseite wie erwartet, andernfalls gibt get_queried_object () eine andere Struktur zurück.

<?php 
  the_post(); // Attempt to populate post globals (works if this author has regular posts)

  global $authordata;
  if ( !is_object( $authordata ) ) $authordata = get_queried_object(); 
?>

Wenn ich mehr darüber nachdenke, scheint es, dass die Standardmethode zum Auffüllen der Autorendaten tatsächlich fehlerhaft ist. Es wird eine Liste der Beiträge der Autoren abgerufen und basierend auf dem ersten Beitrag in der Liste werden die Autorendaten (neu) ausgefüllt. Ich werde nicht sagen, dass mein Ansatz besser oder sogar gut ist, aber ich mag die Idee, das Autorenobjekt als das primär abgefragte Objekt auf dieser Seite zu behandeln, anstatt nur einen Zusatz zu einem Beitrag, der auf dieser Seite auftaucht Seite wegen einer kreisförmigen Beziehung mit dem abgefragten Begriff.

1
Tom Auger

Wenn ein Benutzer keinen Beitrag hat, wird standardmäßig 404 angezeigt. Sie können die Benutzer-ID dieses Benutzers aus der Variablen $author abrufen. Dann können Sie die Beiträge der Benutzer und andere Arten von Dingen nach Belieben einfügen.

0
Tareq

Ich musste das kürzlich auf einer Seite ohne "Posts" machen, die noch Autorenseiten brauchten.

Grundsätzlich fangen Sie Autorenseiten am template_redirect-Hook ab, stellen sicher, dass das 404-Flag deaktiviert ist, und fügen die Autorenvorlage hinzu. Sie können die Logik innerhalb des Vorlagenumleitungstests nach Bedarf erweitern. Was Sie dann in der Vorlage author.php tun, liegt bei Ihnen.

/* Force author views to use author.php, rather than default to 404 pages 
    if there are no posts to show. */
add_action( 'template_redirect', 'author_page_template' );

function author_page_template() {

    // Note: you probably also want to check if the author exists...
    if ( is_author() ) {
        global $wp_query;
        $wp_query->set( 'is_404', false );
        include( get_stylesheet_directory().'/author.php' );
        exit;
    }

}
0
goldenapples