web-dev-qa-db-fra.com

Comment créer un shortcode personnalisé qui renverra un type d'article personnalisé par ID?

S'il vous plaît, excusez mon ignorance, cela semble simple, mais je ne peux pas le comprendre et je me suis précipité pour pirater les choses ensemble. Je ne trouve rien en ligne pour m'aider.

Ce que j'ai: Un type de message personnalisé nommé "case_study". Un grand nombre de ces publications seront publiées et seront utilisées à divers endroits sur le site, dont certaines plus d'une fois.

Ce dont j'ai besoin: Imprimer une étude de cas individuelle si nécessaire, par ID. J’ai le sentiment qu’utiliser un code court serait le moyen le plus évident de le faire, mais je n’y parviens pas. (Peut-être existe-t-il une meilleure option conviviale?)

Je voudrais que mon shortcode fonctionne comme ceci: [case_study id = 31]

Voici mon code de plugin. Ceci imprime actuellement toute la catégorie d’étude de cas lorsque j’utilise le code court:

//Case study Post Type
add_action('init', 'register_cpt_case_study');

function register_cpt_case_study() {

    $labels = array(
        'name' => _x('Case Studies', 'case_study'),
        'singular_name' => _x('Case Study', 'case_study'),
        'add_new' => _x('Add New', 'case_study'),
        'add_new_item' => _x('Add New Case Study', 'case_study'),
        'edit_item' => _x('Edit Case Study', 'case_study'),
        'new_item' => _x('New Case Study', 'case_study'),
        'view_item' => _x('View Case Study', 'case_study'),
        'search_items' => _x('Search Case Studies', 'case_study'),
        'not_found' => _x('No case studies found', 'case_study'),
        'not_found_in_trash' => _x('No case studies found in Trash', 'case_study'),
        'parent_item_colon' => _x('Parent Case Study:', 'case_study'),
        'menu_name' => _x('Case Studies', 'case_study'),
    );

    $args = array(
        'labels' => $labels,
        'hierarchical' => false,
        'description' => 'A case study plugin for better management and organization',
        'supports' => array('title', 'editor'),
        'public' => false,
        'show_ui' => true,
        'show_in_menu' => true,
        'menu_icon' => 'http:www.changethis.com', //change this icon
        'show_in_nav_menus' => false,
        'publicly_queryable' => true,
        'exclude_from_search' => true,
        'has_archive' => false,
        'query_var' => true,
        'can_export' => true,
        'rewrite' => true,
        'capability_type' => 'post'
    );

    register_post_type('case_study', $args);
}

// THE SHORTCODE FOR CASE STUDIES
function case_study_shortcode($atts) {
    extract(shortcode_atts(array(
        'id' => '',
                    ), $atts));
//The Query
    query_posts('post_type=case_study');
//The Loop
    if (have_posts()) : while (have_posts()) : the_post();
            echo '<h3>';
            echo the_title();
            echo '</a></h3>';
            echo the_content();
        endwhile;
    else:
    endif;

//Reset Query
    wp_reset_query();
}

add_shortcode('case_study', 'case_study_shortcode');

Tout avis serait grandement apprécié!

1
brooksy

Ok, j'ai trouvé une réponse simple à mon problème. Voici la fonction de shortcode que j'ai finalement utilisée pour obtenir le résultat souhaité:

function cpt_case_study_func($atts){

extract( shortcode_atts( array(

    'id' => null,

), $atts ) );

    $post = get_post($id);
    $content = '<div class="case-study"><h3>' . $post->post_title . '</h3>   <p>' . $post->post_content . '</p></div>';
    return $content;
    }

    add_shortcode('case_study','cpt_case_study_func');

Merci à l'aide de Kyle sur ce post

1
brooksy