webentwicklung-frage-antwort-db.com.de

So platzieren Sie benutzerdefinierte Beitragstypen auf der Startseite

Ich versuche, mit WordPress ein Portfolio mit einem benutzerdefinierten Beitragstyp zu erstellen, um meine Projekte anzuzeigen. Jedes Projekt, das ich auf meiner statischen Startseite anzeigen möchte, enthält ein Bild als Miniaturansicht. Wenn ich auf eine Miniaturansicht klicke, gehe ich direkt zum Projekt.

Wie poste ich benutzerdefinierte Post-Typen auf der statischen Startseite? Ich möchte nur die letzten 6 Beiträge anzeigen und hätte dann über meine Navigation einen Link zum Rest.

1
Xero1

Wenn Sie also ein CPT mit dem Namen wpse_242473_custom_post_type registriert haben, können Sie damit 6 aktuelle Beiträge dieses Typs auf Ihrer statischen Startseite (oder irgendwo anders) platzieren. Sie können einen Shortcode oder ein Template-Tag verwenden und die Funktion sollte für beide funktionieren.

Es ist eine Modifikation von Code, den ich auf vielen Websites verwende. Gib es in den functions.php deines Themas ein. Ändern Sie natürlich das HTML, das ich verwendet habe, um es Ihren Wünschen anzupassen.

Ich habe eine Wendung hinzugefügt, die ich schon seit einiger Zeit ausprobieren möchte. Wenn es dich also erwürgt, lass es mich wissen und ich werde es richtig testen. Was ich hinzugefügt habe, ist ein vollständiger Satz optionaler Argumente, mit denen die gleiche Funktion hoffentlich sowohl für einen Shortcode als auch für ein Template-Tag funktioniert. Sie können entweder [recentposts] in den visuellen Editor einer beliebigen Seite einfügen oder <?php wpse_242473_recent_posts(); ?> in eine beliebige Vorlage Ihres Themas einfügen.

Bearbeiten (oder erstellen) Sie die Vorlage front-page.php, um sie in die Vorlage für Ihre statische Startseite einzufügen. Dies wird automatisch für Ihre statische Startseite ausgewählt, ohne dass Sie es im Seitenbearbeitungsbildschirm auswählen müssen.

function wpse_242473_recent_posts( $atts = null, $content = null, $tag = null ) {

    $out = '';

    $args = array( 
        'numberposts' => '6', 
        'post_status' => 'publish', 
        'post_type' => 'wpse_242473_custom_post_type' ,
    );

    $recent = wp_get_recent_posts( $args );

    if ( $recent ) {

        $out .= '<section class="overview">';

        $out .= '<h1>Recent Projects</h1>';

        $out .= '<div class="overview">';

        foreach ( $recent as $item ) {

            $out .= '<a href="' . get_permalink( $item['ID'] ) . '">';
            $out .= get_the_post_thumbnail( $item['ID'] ); 
            $out .= '</a>';
        }

        $out .= '</div></section>';
    }

    if ( $tag ) {
        return $out;
    } else {
        echo $out;
    }

}

add_shortcode( 'recentposts', 'wpse_242473_recent_posts' );

Es ist ein einfaches Abrufen der gewünschten Beiträge.

Die foreach-Schleife erstellt Ihren HTML-Code und die Bedingung am Ende gibt entweder den HTML-Code zurück, wenn Sie einen Shortcode verwendet haben, oder gibt ihn wieder, wenn Sie die Funktion als Template-Tag aufrufen.

Viele Artikel im Web zeigen Ihnen nicht, dass das dritte Argument an alle Shortcode-Handler übergeben wurde. Wenn Sie den Shortcode verwenden, enthält er den Shortcode-Namen, sodass ein Handler theoretisch mehrere Shortcodes verarbeiten kann. In diesem Fall verwenden wir es, um festzustellen, ob die Funktion tatsächlich als Shortcode-Handler aufgerufen wurde oder nicht.

1

Bearbeiten: Diese Antwort wurde geschrieben, bevor ich merkte, dass das OP eine statische Titelseite hat. Ich habe es hier gelassen, falls es für andere nützlich ist, und eine zweite Antwort für die statische Titelseite hinzugefügt.

Dadurch wird Ihr benutzerdefinierter Beitragstyp zur Hauptschleife der Startseite hinzugefügt:

add_action( 'pre_get_posts', 'wpse_242473_add_post_type_to_home' );

function wpse_242473_add_post_type_to_home( $query ) {

    if( $query->is_main_query() && $query->is_home() ) {
        $query->set( 'post_type', array( 'post', 'your_custom_post_type_here') );
    }
}

Durch das Überprüfen von is_home wird sichergestellt, dass wir auf der Startseite des Blogs sind, und durch is_main_query wird sichergestellt, dass keine sekundären Schleifen versehentlich beeinflusst werden.

Wenn Sie nur Ihren benutzerdefinierten Beitragstyp und keine normalen Beiträge verwenden möchten, entfernen Sie post aus dem Array der Beitragstypen.

Es gibt einige falsche Artikel im Web, die diese Aktion als Filter behandeln. Dies ist nicht der Fall, da die Abfrage als Referenz übergeben wird, sodass Sie Abfrage-Argumente direkt festlegen können.

3

Sie können folgende Schritte ausführen:
1) Erstellen Sie eine Vorlage Ihres CPT (Benutzerdefinierter Beitragstyp)
2) Fügen Sie die folgenden Codes in diese Vorlage ein. Ersetzen Sie CPT durch Ihr CPT.
3) Öffnen Sie eine neue Seite und veröffentlichen Sie eine neue Seite, indem Sie diese Vorlage auf der rechten Seite auswählen.
4) Zum Schluss gehen Sie zur Einstellung, klicken Sie auf Lesen und wählen Sie die Startseite unter Eine statische Seite.

Codes:

<?php
/**
 *Template Name:CPT
 * @package CPT 
 * @since CPT  1.0
 */ 
get_header(); 

global $paged;  
    if( get_query_var( 'paged' ) ) {
        $paged = get_query_var( 'paged' );
    } elseif( get_query_var( 'page' ) ) {
        $paged = get_query_var( 'page' );
    } else {
        $paged = 1;
    }

    $args = array(
        'post_type'     => 'CPT',
        'posts_per_page'=>6,
        'paged'         => $paged,
    );

    $query = new WP_Query($args);
?>

<?php if ( $blog_query->have_posts() ) : ?>
                            <?php while ( $query->have_posts() ) : $query->the_post(); ?>
                                <div class="post-thumbnail">
                                      <?php if (  (function_exists('has_post_thumbnail')) && (has_post_thumbnail())  ) {?>
                                          <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
                                           <?php the_post_thumbnail(); ?>  
                                          </a>
                                        <?php }
                                      ?>
                                </div>

                            <?php endwhile; ?>
<?php endif; ?>

<?php get_footer(); ?>
0
bdtheme