如何创建短代码以使用其帖子ID显示特定的推荐?

i have created custom post type for testimonials in wordpress.i have added 89 testimonials and wants to display 2 which i wants to displany in home page . so wanted to created shortcode which will display testimonials according to their Post ID. can anyone please tell me the code for shortcode.

Below i am showing code i had written to create custom post type for testimonial . Pls tell me the code to create shortcode like this:-[testimonial posts_per_page="5" testimonial_id="123,145"]

function custom_post_testimonial_type() {

// Set UI labels for Custom Post Type
$labels = array(
    'name'=> _x( 'Testimonials', 'Post Type General Name', 'walker_theme' ),
 'singular_name'=> _x( 'Testimonial', 'Post Type Singular Name', 'walker_theme' ),
   'menu_name'=> __( 'Testimonials', 'walker_theme' ),
'parent_item_colon' => __( 'Testimonial', 'walker_theme' ),
'all_items'  => __( 'All Testimonials', 'walker_theme' ),
'view_item' => __( 'View Testimonial', 'walker_theme' ),
'add_new_item' => __( 'Add New Testimonial','walker_theme' ),
'add_new'  => __( 'Add New', 'walker_theme' ),
'edit_item'  => __( 'Edit Testimonial','walker_theme' ),
'update_item' => __( 'Update Testimonial','walker_theme' ),
'search_items' => __( 'Search Testimonial', 'walker_theme' ),
'not_found'           => __( 'Not Found', 'walker_theme' ),
'not_found_in_trash'  => __( 'Not found in Trash','walker_theme' ),
);

  // Set other options for Custom Post Type

$args = array(
'label'               => __( 'testimonials', 'walker_theme' ),
'description'         => __( 'Home page testimonials', 'walker_theme' ),
'labels'              => $labels,
    // Features this CPT supports in Post Editor
'supports' => array( 'title', 'editor', 'author','thumbnail', 'tags'),
    // You can associate this CPT with a taxonomy or custom 
      taxonomy. 
    'taxonomies'          => array( 'genres', 'post_tag' ),
    /* A hierarchical CPT is like Pages and can have
    * Parent and child items. A non-hierarchical CPT
    * is like Posts.
    */  
    'hierarchical'        => false,
    'public'              => true,
    'show_ui'             => true,
    'show_in_menu'        => true,
    'show_in_nav_menus'   => true,
    'show_in_admin_bar'   => true,
    'menu_position'       => 5,
    'can_export'          => true,
    'has_archive'         => true,
    'exclude_from_search' => false,
    'publicly_queryable'  => true,
    'capability_type'     => 'page',
);

// Registering your Custom Post Type
register_post_type( 'testimonials', $args );

    }

    add_action( 'init', 'custom_post_testimonial_type', 0 );
donglu8344812
donglu8344812 请尽快回复....
一年多之前 回复

2个回答

Use the shortcode attributes with known attributes and fills in defaults when needed.

 function testimonials($atts) {
    $a = shortcode_atts( array(
        'posts_per_page' => '',
        'testimonial_id'  =>  ''
    ), $atts );

    $testimonials = '';
    $post_in = esc_attr($a['testimonial_id']);
    $posts_per_page = esc_attr($a['posts_per_page']);

    $post_artay = explode(',', $post_in);
    $args = array(
        'post__in' => $post_artay,
        'posts_per_page' => $posts_per_page,
        'post_type'        => 'testimonials',
        'order_by' => 'post__in',
    );

    // the query
    $the_query = new WP_Query( $args );

    if ( $the_query->have_posts() ) :
    while ( $the_query->have_posts() ) : $the_query->the_post();
        $testimonials.= '<div class="title">'.get_the_title().'</div>';
        $testimonials.= '<div class="content">'.get_the_content().'</div>';
        $testimonials.='<div class="date">'.get_the_date().'</div>';
        $testimonials.='<div class="author">'.get_the_author().'</div>';
    endwhile;
    endif;
    return $testimonials;
}
add_shortcode('testimonial', 'testimonials' );

use the shortcode like.

[testimonial posts_per_page="5" testimonial_id="29,23"]
doushen8391
doushen8391 别客气。 你能否请注册并将此答案标记为已批准。 这将更合适。 谢谢。
一年多之前 回复
douzhao2047
douzhao2047 它再次起作用,非常感谢你......
一年多之前 回复
dongpin2969
dongpin2969 thanx很多....我会尝试这个让你知道
一年多之前 回复
dongtanlin0765
dongtanlin0765 我更新了日期代码和作者请看一下。
一年多之前 回复
dongzhan0624
dongzhan0624 我想显示日期和作者姓名,请你告诉我
一年多之前 回复
douliao8318
douliao8318 完成测试后,我忘了在代码中更新'post_type'。 现在我编辑我的代码并更新'post_type'。 它现在应该工作。
一年多之前 回复
dongzituo5530
dongzituo5530 不工作....但是我的问题现在解决了...
一年多之前 回复

Hi let's add this code in the theme's functions.php file.

add_shortcode( 'testimonial', 'testimonial_shortcode_callback' );

function testimonial_shortcode_callback( $atts ) {
ob_start();

extract( shortcode_atts( array(
    'posts_per_page' => 5,
    'testimonial_id' => '',
), $atts ) );

// define query parameters based on attributes
$options = array(
    'post_type'      => 'testimonials',
    'posts_per_page' => $posts_per_page,
);

if ( ! empty( $testimonial_id ) ) {
    $options['post__in'] = array_map( 'trim', explode( ',', $testimonial_id ) );
}

$testimonial_query = new WP_Query( $options );
// run the loop based on the query
if ( $testimonial_query->have_posts() ) :
    ?>
    <ul class="testimonial-listing">
        <?php
        while ( $testimonial_query->have_posts() ) : $testimonial_query->the_post();
            ?>
            <li id="testimonial-<?php the_ID(); ?>">
                <?php the_content(); ?>
            </li>
        <?php
        endwhile;
        wp_reset_postdata();
        ?>
    </ul>
    <?php
    $testimonial_output = ob_get_clean();

    return $testimonial_output;
endif;
}

Than use this shortcode as a example [testimonial posts_per_page="2" testimonial_id="123,145"]

douyue9704
douyue9704 另一个关注@devthebuilder我想显示日期也是蚂蚁作者的名字?请帮助我
一年多之前 回复
donglu2008
donglu2008 使用你的代码解决了很多问题...
一年多之前 回复
doujiao1984
doujiao1984 非常感谢 ......
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐