web-dev-qa-db-de.com

Benutzerdefinierten Beitragstyp abfragen?

Ich habe das Custom Post Type UI Plugin installiert. Nach der Aktivierung dieses Plugins habe ich einen benutzerdefinierten Beitragstyp namens portfolio erstellt. Jetzt möchte ich dies auf der Portfolio-Seite im Frontend verwenden. Wie hole ich alle Posts, die vom benutzerdefinierten Post-Typ portfoliosind?

13
shalu
query_posts( array( 'post_type' => array('post', 'portfolio') ) );

hier werden sowohl normale Beiträge als auch Beiträge innerhalb des Typs portfolio angezeigt

oder

query_posts('post_type=portfolio');

nur für portfolio.

Wie gewohnt verwenden WP Abfrage - Lesen Sie den Codex: http://codex.wordpress.org/Function_Reference/query_posts#Usage und http://codex.wordpress.org/Function_Reference/ query_posts # Post_.26_Page_Parameters

<?php 
    query_posts(array( 
        'post_type' => 'portfolio',
        'showposts' => 10 
    ) );  
?>
<?php while (have_posts()) : the_post(); ?>
        <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
        <p><?php echo get_the_excerpt(); ?></p>
<?php endwhile;?>
21
Martin-Al

Späte Antwort als Hauptantwort verwendet query_posts(), was nie erledigt werden sollte.

Verwenden Sie einen Filter

Verwenden Sie den Filter pre_get_posts und legen Sie einfach den Post-Typ portfolio für die Hauptabfrage fest. Verwenden Sie Bedingte Tags , um zu bestimmen, wo Sie diesen Filter haben möchten.

Schnelles Beispiel

<?php
defined( 'ABSPATH' ) OR exit;
/* Plugin Name: (#6417) "Portfolio" post type in query */

add_filter( 'pre_get_posts', 'wpse_6417_portfolio_posts' );
function wpse_6417_portfolio_posts( $query )
{
    if (
        ! $query->is_main_query()
        // Here we can check for all Conditional Tags
        OR ! $query->is_archive() // For e.g.: Every archive will feature both post types
    )
        return $query;

    $query->set( 'post_type', array( 'post', 'portfolio' ) );

    return $query;
}

Haftungsausschluss

Der obige Code ist ein Plugin, kann aber einfach in die functions.php -Datei Ihres Themas eingefügt werden (dies ist nicht empfohlen).

15
kaiser

Fügen Sie diesen Code zu Ihrer Child Themes-Funktionsdatei hinzu (empfohlen), um Ihre einzelnen CPT-Seiten zu Ihrer Hauptschleife hinzuzufügen

add_action( 'pre_get_posts', 'add_custom_post_types_to_loop' );

function add_custom_post_types_to_loop( $query ) {

if ( is_home() && $query->is_main_query() )

$query->set( 'post_type', array( 'post', 'portfolio' ) );

return $query;

}

Quelle http://codex.wordpress.org/Post_Types

Oder erstellen Sie eine benutzerdefinierte Seitenvorlage archive-portfolio.php die nur Ihre CPT-Seiten anzeigt. Dies muss nur durchgeführt werden, wenn Sie über die Plugin-Einstellungen keine Archivseite hinzugefügt haben.

Beispiel: 'has_archive' => true,

Mit diesem Code können Sie auch steuern, wie viele Seiten angezeigt werden und in welcher Reihenfolge sie auf der Archivseite angezeigt werden:

add_action( 'pre_get_posts', 'cpt_items' );

function cpt_items( $query ) {

if( $query->is_main_query() && !is_admin() && is_post_type_archive( 'portfolio' ) ) {

$query->set( 'posts_per_page', '8' );

$query->set( 'order', 'ASC' );

    }

}
4
Brad Dalton