Пользовательский класс post, генерирует уникальный идентификатор от 1 до x в зависимости от количества сообщений?

Я создаю персонализированный тип сообщения, где у меня есть небольшая проблема с созданием идентификатора: так, как я хочу. Идея класса post заключается в создании таблицы с идентификатором и заголовком сообщения. Интересно, можно ли генерировать уникальный идентификатор в зависимости от количества сообщений в классе, начиная с 1. Мой план с классом post или типом заключается в том, что он будет использоваться в качестве FAQ, где заголовок запускает модификатор modrap с ответ.

Вот соответствующий код:

function cptModal_frontend($atts){ $id = rand(0, 999); // use a random ID so that the CSS IDs work with multiple on one page $args = array( 'post_type' => 'cptModal', 'orderby' => 'menu_order', 'order' => 'ASC'); $loop = new WP_Query( $args ); $modals = array(); while ( $loop->have_posts() ) { $loop->the_post(); if ( '' != get_the_title() ) { $title = get_the_title( get_the_ID()); $content = get_the_excerpt(); $modals[] = array('title' => $title, 'content' => $content); } } if(count($modals) > 0){ ob_start(); ?> <!--Table start--> <table class="table table-hover table-bordered"> <thead> <tr> <th>#</th> <th>Fråga:</th> </tr> </thead> <tbody> <?php foreach ($modals as $key => $title) { ?> <tr> <td><?php echo $id;?></td> <td><a href="#cptmodal_<?php echo $id; ?>" data-toggle="modal"><?php echo $title['title'];?></a></td> </tr> <?php } ?> </tbody> </table> <!--Table end--> <!--modal start--> <?php foreach ($modals as $key => $title) { ?> <div id="cptmodal_<?php echo $id; ?>" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <h3 id="myModalLabel"><?php echo $title['title'];?></h3> </div> <div class="modal-body"> <p><?php $title['content'] ?></p> </div> <div class="modal-footer"> <button class="btn btn-custom" data-dismiss="modal" aria-hidden="true">Stäng</button> </div> </div> <?php } ?> <!--Modal end--> <?php } $output = ob_get_contents(); ob_end_clean(); // Restore original Post Data wp_reset_postdata(); return $output; 

Полный код:

 // Custom Post Type Setup add_action( 'init', 'cptModal_post_type' ); function cptModal_post_type() { $labels = array( 'name' => 'Modals', 'singular_name' => 'Modal', 'add_new' => 'Add New', 'add_new_item' => 'Add New modal', 'edit_item' => 'Edit modal', 'new_item' => 'New modal', 'view_item' => 'View modal', 'search_items' => 'Search modals', 'not_found' => 'No modal', 'not_found_in_trash' => 'No modal found in Trash', 'parent_item_colon' => '', 'menu_name' => 'FAQ Modals' ); $args = array( 'labels' => $labels, 'public' => true, 'exclude_from_search' => false, 'publicly_queryable' => false, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => true, 'capability_type' => 'page', 'has_archive' => true, 'hierarchical' => false, 'menu_position' => 21, 'supports' => array('title','excerpt', 'page-attributes') ); register_post_type('cptModal', $args); } // FRONT END // Shortcode function cptModal_shortcode($atts, $content = null) { // Set default shortcode attributes $defaults = array( 'backdrop' => 'true', 'keyboard' => 'true', 'show' => 'true' ); // Parse incomming $atts into an array and merge it with $defaults $atts = shortcode_atts($defaults, $atts); return cptModal_frontend($atts); } add_shortcode('FAQ_modal', 'cptmodal_shortcode'); // Display latest WftC function cptModal_frontend($atts){ $id = rand(0, 999); // use a random ID so that the CSS IDs work with multiple on one page $args = array( 'post_type' => 'cptModal', 'orderby' => 'menu_order', 'order' => 'ASC'); $loop = new WP_Query( $args ); $modals = array(); while ( $loop->have_posts() ) { $loop->the_post(); if ( '' != get_the_title() ) { $title = get_the_title( get_the_ID()); $content = get_the_excerpt(); $modals[] = array('title' => $title, 'content' => $content); } } if(count($modals) > 0){ ob_start(); ?> <!--Table start--> <table class="table table-hover table-bordered"> <thead> <tr> <th>#</th> <th>Fråga:</th> </tr> </thead> <tbody> <?php foreach ($modals as $key => $title) { ?> <tr> <td><?php echo $id;?></td> <td><a href="#cptmodal_<?php echo $id; ?>" data-toggle="modal"><?php echo $title['title'];?></a></td> </tr> <?php } ?> </tbody> </table> <!--Table end--> <!--modal start--> <?php foreach ($modals as $key => $title) { ?> <div id="cptmodal_<?php echo $id; ?>" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <h3 id="myModalLabel"><?php echo $title['title'];?></h3> </div> <div class="modal-body"> <p><?php $title['content'] ?></p> </div> <div class="modal-footer"> <button class="btn btn-custom" data-dismiss="modal" aria-hidden="true">Stäng</button> </div> </div> <?php } ?> <!--Modal end--> <?php } $output = ob_get_contents(); ob_end_clean(); // Restore original Post Data wp_reset_postdata(); return $output; } ?> 

Solutions Collecting From Web of "Пользовательский класс post, генерирует уникальный идентификатор от 1 до x в зависимости от количества сообщений?"

Просто возьмите идентификатор сообщения. Это уже уникально.

 // In the loop printf( "<tag>%s-{$post->post_title}</tag>", get_the_ID() ); 

Если вам нужно перейти от 1-x, где он должен начинаться с 1 , просто используйте:

 // In the Loop: // Assign "1" only to the first post 0 === $post->current_post AND $id = 1; 

Затем просто перейдите и постройте массив целых чисел перед циклом:

 // An array of integers that have the range starting from 2 // until the max amount of posts reduced by 1 for the first post $id_array = range( 2, $GLOBALS['wp_query']->post_count -1 ); 

С помощью array_rand() вы сможете извлечь из него какой-то случайный ключ.

 // Before the Loop $rand_keys = array_rand( $id_array, count( $id_array ) ); // In the Loop $id = 0 !== $post->current_post ? $id_array[ $rand_keys[ $post->current_post ] ] : 1; printf( "<tag>%s-{$post->post_title}</tag>", $id ); 

Вы также можете использовать shuffle() для смешивания результата range() .