Visualizzare custom post type con shortcode

8 apr 2015, 09:35:19
Visualizzazioni: 38.6K
Voti: 5

Ho creato un custom post type per il mio tema WordPress e una pagina dove vengono visualizzati i custom post type. Ma qualcuno sa come creare uno shortcode che visualizzi i post di un custom post type?

1
Commenti

Possibile sì, ma cosa hai provato tu stesso per risolvere questo problema e dove ti sei bloccato?

Pieter Goosen Pieter Goosen
8 apr 2015 10:15:32
Tutte le risposte alla domanda 1
1

Penso che, fondamentalmente, la tua domanda sia come interrogare i post di un custom post type in uno shortcode. Dovresti dare un'occhiata alla sezione WP_Query di WordPress: https://codex.wordpress.org/Class_Reference/WP_Query

Nel mio codice di esempio creo uno shortcode che mostra il titolo degli ultimi post pubblicati del tipo 'my-custom-post-type':

<?php
    add_shortcode( 'shortcodename', 'display_custom_post_type' );

    function display_custom_post_type(){
        $args = array(
            'post_type' => 'my-custom-post-type',
            'post_status' => 'publish'
        );

        $string = '';
        $query = new WP_Query( $args );
        if( $query->have_posts() ){
            $string .= '<ul>';
            while( $query->have_posts() ){
                $query->the_post();
                $string .= '<li>' . get_the_title() . '</li>';
            }
            $string .= '</ul>';
        }
        wp_reset_postdata();
        return $string;
    }
?>

Poiché uno shortcode viene eseguito nel loop, dovresti usare wp_reset_postdata() dopo aver completato la tua query, così il Main Loop funzionerà di nuovo come previsto. Puoi trovare maggiori informazioni su questa funzione qui: https://codex.wordpress.org/Function_Reference/wp_reset_postdata

Spero che questo ti dia un buon punto di partenza.

8 apr 2015 10:14:08
Commenti

dovresti usare wp_reset_postdata dopo un loop secondario. wp_reset_query è necessario solo per ripristinare il globale $wp_query, che in questo caso non è stato sovrascritto. wp_reset_query chiama internamente anche wp_reset_postdata, motivo per cui funziona qui, ma è superfluo.

Milo Milo
11 feb 2016 18:15:58