Я решаю эту проблему с пользовательскими типами сообщений и коротким кодом.
Плагины (опционально - вы можете передать код всё)
- Пользовательские почтовые типы и пользовательские поля создателя - WCK
- Интуитивный заказ Сообщение Заказать
Создайте свой собственный тип записи и поля. Используйте интуитивный пользовательский почтовый заказ, чтобы пользователи могли изменять порядок сообщений.
Адаптировать шаблон SHORTCODE, чтобы соответствовать код и требования:
add_shortcode('cpt-list', 'jpro_cpt_list');
function jpro_cpt_list() {
$args = array (
'post_type' => array('cpt'),
'posts_per_page' => '-1',
'orderby' => 'menu_order',
'order' => 'ASC'
);
$query = new WP_Query($args);
$cpt_list = '<div class="jpro-cpt cpt-list container">';
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$post = get_post($id);
$postID = $post->ID;
$image = get_the_post_thumbnail($postID, 'medium', array('class' => 'aligncenter'));
$name = get_the_title($postID);
$bio = apply_filters('the_content', $post->post_content);
if(!empty($image)){
$output_image = '<div class="cpt-list image">'.$image.'</div>';
} else {
$output_image = '';
}
if(!empty($name)){
$output_name ='<h3 class="cpt-name cpt-list">'.$name.'</h3>';
} else {
$output_name = '';
}
if(!empty($bio)){
$output_bio ='<div class="cpt-bio cpt-list">'.$bio.'</div>';
} else {
$output_bio = '';
}
$cpt_list .= '<section class="jpro-cpt cpt-list columnClass">';
$cpt_list .= $output_image;
$cpt_list .= $output_name;
$cpt_list .= $output_bio;
$cpt_list .= '</section>';
}
} else {
$cpt_list .='<p>Ooops! No cpt Found.</p>';
}
$cpt_list .='</div>';
wp_reset_postdata();
return $cpt_list;
}