web-dev-qa-db-fra.com

Ajouter un attribut de catégorie à un shortcode personnalisé

J'ai créé un type de message personnalisé appelé "faq". Le type de publication personnalisé utilise des catégories. J'ai créé un shortcode [faq] qui affiche tous les articles de la FAQ.

Ce que je voudrais faire, c'est ajouter un attribut au shortcode qui spécifie une catégorie de faq. Ainsi, au lieu d’utiliser le shortcode [faq], ce serait quelque chose comme [faq category = "travel"] et il n’afficherait que les messages de la catégorie "travel".

J'utilise le code suivant pour le shortcode pour le moment. J'ai juste besoin d'ajouter l'attribut category d'une manière ou d'une autre:

add_shortcode('faq', function() {

    $posts = get_posts(array(  //Get the FAQ Custom Post Type
        'numberposts' => -1,
        'orderby' => 'menu_order',
        'order' => 'ASC',
        'post_type' => 'faq',
    ));

    $faq  = '<div id="faq-accordion">'; //Open the container
    foreach ( $posts as $post ) { // Generate the markup for each Question
        $faq .= sprintf(('<h3><a href="">%1$s</a></h3><div>%2$s</div>'),
            $post->post_title,
            wpautop($post->post_content)
        );
    }
    $faq .= '</div>'; //Close the container

    return $faq; //Return the HTML.
});
1
Ciaran Gaffey
add_shortcode( 'faq', 'wpse105856_shortcode_callback' );

function wpse105856_shortcode_callback( $atts ) {
    extract( shortcode_atts( array(
        'category' => ''
    ), $atts ) );

    $args = array(
        'numberposts' => -1,
        'orderby' => 'menu_order',
        'order' => 'ASC',
        'post_type' => 'faq'
    ));

    if ( ! empty( $category ) ) {
        $args['category_name'] = $category;
    }

    $posts = get_posts( $args );

    $faq  = '<div id="faq-accordion">'; //Open the container
    foreach ( $posts as $post ) { // Generate the markup for each Question
        $faq .= sprintf(('<h3><a href="">%1$s</a></h3><div>%2$s</div>'),
            $post->post_title,
            wpautop($post->post_content)
        );
    }
    $faq .= '</div>'; //Close the container

    return $faq; //Return the HTML.
});

Remarque: Même si le paramètre WP_Query s'appelle category_name, il est prévu qu'un slug lui soit attribué.

2
Johannes Pille

J'ai créé un type de message personnalisé appelé "whiz_qt_quote". Le type de publication personnalisé utilise des catégories. J'ai créé un shortcode pour tout le post [quote].

Ce que je voudrais afficher un post de catégorie sur une page. Ainsi, au lieu d’utiliser le shortcode [quote], ce serait quelque chose comme [quote category="motivation"] et il n’afficherait que les articles de la catégorie "motivation".

J'utilise le code suivant pour le shortcode pour le moment. J'ai juste besoin d'ajouter l'attribut category d'une manière ou d'une autre:

if (!defined('ABSPATH')) exit;

function whiz_qt_feed_shortcode( $atts ) {
    extract( shortcode_atts( array( 'limit' => 3, 'type' => 'whiz_qt_quote','category' => ''), $atts ) );
    global $paged;
    $paged = get_query_var('paged') ? get_query_var('paged') : 1;  

        $args = query_posts(  array ( 
        'posts_per_page' => $limit, 
        'post_type' => $type, 
        'order' => 'ASC', 
        // 'orderby' =>'menu_order', 
        'paged' => $paged ,
        'category_name' => $category) );
        if ( ! empty( $category ) ) {
        $args['category_name'] = $category;
    }
$list = ' ';   
while ( have_posts() ) { the_post();

    $list .= '<article class="listing-view clearfix">' 
    . '<div class="listing-content">' 
    . '<h3><a href="' . get_permalink() . '">' . get_the_title() . '</a></h3>' 
    .'<p>' . get_the_excerpt() . '</p>'
    . '</div>'
    . '</article>';
}

return 
'<div class="listings clearfix">' 
. $list 
. '<div class="nav-previous">' . get_next_posts_link( __( '<span class="meta-nav">&larr;</span> Older posts' ) ) . '</div>'
. '<div class="nav-next">' . get_previous_posts_link( __( 'Newer posts <span class="meta-nav">&rarr;</span>' ) ) . '</div>'
. '</div>' .
wp_reset_query();

}
add_shortcode( 'quote', 'whiz_qt_feed_shortcode' );
?>`
0
kuldeep sandhu