Как создать короткий код, который будет показывать конкретные сообщения по идентификаторам - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть пользовательские типы сообщений.Я хочу создать короткий код, который будет показывать некоторые конкретные сообщения по номеру идентификатора.Например,пост с id 1, 23, 30 и т. д. Вот как я пытался создать короткий код

function success_short($atts) {

    extract( shortcode_atts( array (

         'id' => null,

    'type' => 'aol_ad',

    'order' => 'date',

    'orderby' => 'title',

    'posts' => -1,



    'category' => '',

    ), $atts ) );


                            $args = array(

                        'post_type'=>$type,

                        'post_status'=>'publish',

                         'post__in' => array($id),

                        'posts_per_page'=>$posts,

                        'paged'=>get_query_var('paged')

                         );



$the_query = new WP_Query( $args ); ?>

   <div class="post_wrap">


 <?php if ( $the_query->have_posts() ) :

    while ( $the_query->have_posts() ) : $the_query->the_post();

 ?>


  <div class="case_boxes col-md-3"> 

<div class="case_box_img">
      <?php the_post_thumbnail(); ?>

      </div>

      <div class="case_title">
      <a href="<?php the_permalink(); ?>">
        <h5><?php the_title(); ?></h5>
      </a>

      </div>

  </div>




        <?php


endwhile;

    wp_reset_postdata(); ?>



    </div>



<?php else : ?>

    <p>Sorry, no posts matched your criteria. </p>

<?php endif; 

   }


add_shortcode('success-post', 'success_short');

Затем я попытался вставить короткий код, например [success-post id = "1, 23, 30"] но короткий код не показывает сообщение с указанным идентификатором.Как я могу это исправить?спасибо

1 Ответ

0 голосов
/ 26 февраля 2019

Значения атрибута шорткода по умолчанию являются строками.

Поэтому, когда вы передаете что-то вроде "1, 23, 30", тогда это строка, и вы пытаетесь передать эту строку в качестве значения фильтра в post__in, который ожидаетМассив PHP.

Попробуйте это -

     ...
     posts__in => explode(",", str_replace(" ", "", trim($id, '"')))
     ... 
...