Hai domande sul tipo di post personalizzato? [chiuso]


16

Ho installato il plug-in UI di tipo di posta personalizzato . Dopo l'attivazione di questo plugin ho creato un tipo di post personalizzato chiamato portfolio. Ora voglio usarlo nella pagina del portfolio nel front-end. Come posso recuperare tutti i post che sono di tipo post personalizzatoportfolio ?

Risposte:


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

che mostra sia post normali sia post all'interno del portfoliotipo

o

query_posts('post_type=portfolio');

solo per portfolio.

Usa come query WP normale: leggi il codice: http://codex.wordpress.org/Function_Reference/query_posts#Usage e http://codex.wordpress.org/Function_Reference/query_posts#Post_.26_Par_eters

<?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;?>

6
Questa è una risposta abbastanza vecchia - ma per essere chiari, non c'è modo in cui dovresti farlo. Porterà quasi inevitabilmente a 404 e una miriade di altri problemi. Si prega di consultare le risposte di @ kaiser o questo post sul perché non si dovrebbe usarequery_posts()
Stephen Harris,

16

Risposta tardiva utilizzata dalla risposta principale query_posts(), che non dovrebbe mai essere eseguita.

Usa un filtro

Utilizza il pre_get_postsfiltro e imposta il portfoliotipo di post per la query principale. Utilizzare i tag condizionali per determinare dove si desidera disporre di questo filtro.

Esempio rapido

<?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;
}

disconoscimento

Il codice sopra è un plugin, ma può semplicemente essere inserito nel functions.phpfile del tuo tema (che non è raccomandato).


perché non è consigliabile aggiungerlo alle funzioni? Sicuramente, se l'amministratore del sito cambia il tema, dovrebbe comunque rivolgersi a come visualizzare il portfolio sulla home page con questo nuovo tema. Quindi, direi che è altrettanto valido aggiungere questo nelle funzioni piuttosto che in un plugin. Oppure mi sfugge qualcosa?
Phill Healey,

@PhillHealey Come hai detto, i dati sarebbero invisibili e dovresti copiare e incollare il codice. Le modifiche logiche e pesanti alle query vengono gestite al meglio tramite plug-in, mentre la visualizzazione e lo stile devono essere mantenuti nei temi.
Kaiser

Non se quel codice è specifico per il tema.
Phill Healey,

@PhillHealey Un tipo di post non dovrebbe mai essere specifico di un tema.
Kaiser

Ok, se vuoi entrare in qualche tit-for-tat sugli assoluti, allora va bene. Tuttavia, non è corretto affermare che nessun codice specifico di progettazione debba essere trasferito a un plug-in. Ci sono molte volte in cui non è appropriato.
Phill Healey,

4

Aggiungi questo codice al file delle funzioni dei temi figlio (consigliato) per aggiungere le singole pagine CPT al ciclo principale

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;

}

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

Oppure crea un modello di pagina archivio-portfolio.php personalizzato che visualizzerà solo le tue pagine CPT. Questo deve essere fatto solo se non hai aggiunto una pagina di archivio usando le impostazioni del plugin.

Esempio: 'has_archive' => true,

Puoi anche controllare quante pagine sono visualizzate e l'ordine in cui sono visualizzate nella pagina di archivio usando questo codice:

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' );

    }

}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.