shortcode для недавнего пользовательского сообщения типа

Я не кодер, таким образом, я, возможно, сделал некоторые преступления "кодирования", извинения. Я купил тему, у кого есть shortcodes для последних сообщений, но не для последнего "пользовательского типа сообщения". Таким образом, я пытался создать в последний раз "пользовательскую функцию" типа сообщения, изменяющую обеспеченную функцию Последнего сообщения. Последнее сообщение funtion:

function get_custom_posts( $params ) {
extract( shortcode_atts( array (
    'number' => '1',
    'excerpt' => 290,
    'readmore' => 'no',
    'readmoretext' => 'Read more'
), $params ) );

//$latest_posts = get_posts( 'category=0&numberposts=' . $number . '&suppress_filters=false');     OLD
$latest_posts = query_posts( 'cat=0&posts_per_page=' . $number );
wp_reset_query();

$result = '<div class="latest-posts">';
$count = count($latest_posts);
foreach ($latest_posts as $key => $latest_post) {
  $author = get_the_author_meta('nickname', $latest_post->post_author );
  $post_link = get_permalink( $latest_post->ID );
  $date = mysql2date(get_option('date_format'), $latest_post->post_date);
  $category = get_the_category_list( ', ', $parents = '', $latest_post->ID );

  $result .= '<div class="sc-page"><div class="item clearfix">';
  // POST THUMBNAIL
  if (get_the_post_thumbnail( $latest_post->ID, 'thumbnail' )) {
      $result .= '<div class="image">';
      $result .= '<a href="' . $post_link . '" class="greyscale">';
      $result .= get_the_post_thumbnail( $latest_post->ID, 'thumbnail' );
      $result .= '</a>';
      $result .= '</div>';
  }

  // POST BODY
  $result .= '<div class="text">';
  $result .= '<div class="title"><h3><a href="' . $post_link. '">' . $latest_post->post_title . '</a></h3></div>';
  if ( $latest_post->post_excerpt ) {
      $result .= '<p>' . $latest_post->post_excerpt . '</p>';
  }
  else {
      $limit = $excerpt;
      $my_text = substr($latest_post->post_content, 0, $limit);
      $pos = strrpos($my_text, " ");
      $my_post_text = substr($my_text, 0, ($pos ? $pos : -1)) . "...";
      $read = "";
  if($readmore == 'yes'){
    $read = '&nbsp;<a href="' . $post_link. '">'.$readmoretext.'</a>';
  }
      $result .= '<p>' . strip_tags($my_post_text) . $read . '</p>';
      //$result .= '<p>' . substr_replace( $latest_post['0']->post_content, '...', 350 ) . '</p>';
  }

  $result .= '</div><!-- /.text -->';

  if ($count - 1 != $key)
  $result .= do_shortcode('[rule]');

  $result .= '</div></div>';
}
$result .= '</div>';

return $result;
}
add_shortcode( "get_posts", "get_custom_posts" );

Затем я пытался изменить его как это, (мой пользовательский тип сообщения ait-dir-item):

function get_custom_items( $params ) {
extract( shortcode_atts( array (
    'number' => '1',
    'excerpt' => 290,
    'readmore' => 'no',
    'readmoretext' => 'Read more'
), $params ) );

//$latest_posts = get_posts( 'category=0&numberposts=' . $number . '&suppress_filters=false');     OLD
$latest_items = WP_query( 'post_type' = 'ait-dir-item', 'cat=0&posts_per_page=' . $number );
wp_reset_query();

$result = '<div class="latest-items">';
$count = count($latest_items);
foreach ($latest_items as $key => $latest_item) {
  $author = get_the_author_meta('nickname', $latest_item->post_author );
  $post_link = get_permalink( $latest_item->ID );
  $date = mysql2date(get_option('date_format'), $latest_item->post_date);
  $category = get_the_category_list( ', ', $parents = '', $latest_item->ID );

  $result .= '<div class="sc-page"><div class="item clearfix">';
  // POST THUMBNAIL
  if (get_the_post_thumbnail( $latest_item->ID, 'thumbnail' )) {
      $result .= '<div class="image">';
      $result .= '<a href="' . $post_link . '" class="greyscale">';
      $result .= get_the_post_thumbnail( $latest_post->ID, 'thumbnail' );
      $result .= '</a>';
      $result .= '</div>';
  }

  // POST BODY
  $result .= '<div class="text">';
  $result .= '<div class="title"><h3><a href="' . $post_link. '">' . $latest_item->post_title . '</a></h3></div>';
  if ( $latest_item->post_excerpt ) {
      $result .= '<p>' . $latest_item->post_excerpt . '</p>';
  }
  else {
      $limit = $excerpt;
      $my_text = substr($latest_item->post_content, 0, $limit);
      $pos = strrpos($my_text, " ");
      $my_post_text = substr($my_text, 0, ($pos ? $pos : -1)) . "...";
      $read = "";
  if($readmore == 'yes'){
    $read = '&nbsp;<a href="' . $post_link. '">'.$readmoretext.'</a>';
  }
      $result .= '<p>' . strip_tags($my_post_text) . $read . '</p>';
      //$result .= '<p>' . substr_replace( $latest_item['0']->post_content, '...', 350 ) . '</p>';
  }

  $result .= '</div><!-- /.text -->';

  if ($count - 1 != $key)
  $result .= do_shortcode('[rule]');

  $result .= '</div></div>';
}
$result .= '</div>';

return $result;
}
add_shortcode( "get_items", "get_custom_items" );

Конечно, эта функция не работает... Кто-то может помочь мне? Я хочу изменить эту функцию вместо того, чтобы установить плагин, потому что я хочу использовать те же классы, таким образом, у меня будет тот же дизайн для обоих shortcodes.Заранее спасибо!

0
11.06.2013, 15:18
3 ответа

Это, кажется, работает с пользовательским типом сообщения:

function get_custom_posts( $params ) {
extract( shortcode_atts( array (
'number' => '1',
'excerpt' => 290,
'readmore' => 'no',
'cpt' => 'post',
'readmoretext' => 'Read more'
), $params ) );

//$latest_posts = get_posts( 'category=0&numberposts=' . $number .      '&suppress_filters=false');     OLD
$latest_posts = query_posts( 'post_type='.$cpt.'&posts_per_page=' . $number );
wp_reset_query();

$result = '<div class="latest-posts">';
$count = count($latest_posts);
foreach ($latest_posts as $key => $latest_post) {
  $author = get_the_author_meta('nickname', $latest_post->post_author );
  $post_link = get_permalink( $latest_post->ID );
  $date = mysql2date(get_option('date_format'), $latest_post->post_date);
  $category = get_the_category_list( ', ', $parents = '', $latest_post->ID );

  $result .= '<div class="sc-page"><div class="item clearfix">';
 // POST THUMBNAIL
  if (get_the_post_thumbnail( $latest_post->ID, 'thumbnail' )) {
      $result .= '<div class="image">';
      $result .= '<a href="' . $post_link . '" class="greyscale">';
      $result .= get_the_post_thumbnail( $latest_post->ID, 'thumbnail' );
      $result .= '</a>';
      $result .= '</div>';
  }

  // POST BODY
  $result .= '<div class="text">';
  $result .= '<div class="title"><h3><a href="' . $post_link. '">' . $latest_post->post_title . '</a></h3></div>';
  if ( $latest_post->post_excerpt ) {
      $result .= '<p>' . $latest_post->post_excerpt . '</p>';
  }
  else {
      $limit = $excerpt;
      $my_text = substr($latest_post->post_content, 0, $limit);
      $pos = strrpos($my_text, " ");
      $my_post_text = substr($my_text, 0, ($pos ? $pos : -1)) . "...";
      $read = "";
  if($readmore == 'yes'){
    $read = '&nbsp;<a href="' . $post_link. '">'.$readmoretext.'</a>';
  }
      $result .= '<p>' . strip_tags($my_post_text) . $read . '</p>';
      //$result .= '<p>' . substr_replace( $latest_post['0']->post_content, '...', 350 ) . '</p>';
  }

  $result .= '</div><!-- /.text -->';

  if ($count - 1 != $key)
  $result .= do_shortcode('[rule]');

  $result .= '</div></div>';
}
$result .= '</div>';

return $result;
}
add_shortcode( "get_posts", "get_custom_posts" );

Для использования его просто пишут [get_posts cpt="ait-dir-item"] в Ваших сообщениях

Править: это - плохая практика для использования query_post () в этом контексте

0
20.02.2020, 01:42
  • 1
    Вы не должны использовать query_posts для вторичного Цикла. –  s_ha_dum 11.06.2013, 17:00
  • 2
    Спасибо @TweetPressFr! Это работает, заменяя query_post), и удаляя "новый". Это, в чем я нуждался! –  Charlyem 12.06.2013, 19:04
  • 3
    Жаль @TweetPressFr я подразумевал, что Он работает только с query_post и удалением "нового". Почему я должен использовать новый WP_query вместо этого? –  Charlyem 12.06.2013, 19:18
  • 4
    , потому что это - плохая практика для использования query_post в этом контексте. Я не мог бы работать с WP_query, потому что объект не возвращается. –  JMau 12.06.2013, 19:28

Проблема смотрит на меня, чтобы быть этой строкой:

$latest_items = WP_query( 'post_type' = 'ait-dir-item', 'cat=0&posts_per_page=' . $number );

Это очень нечетно. Во-первых, Вы отсутствуете new ключевое слово. Без него Вы получаете "неопределенную функциональную" ошибку.

Во-вторых, с WP_Query, и много других функций, можно использовать подобный строке запроса аргумент функции или массив. Вы (повредили) элементы обоих там, который не собирается работать.

Для подобного строке запроса параметра Вам было бы нужно:

$latest_items = new WP_query('post_type=ait-dir-item&cat=0&posts_per_page='.$number);

Посмотрите, как это - вся одна строка, и Ваш не? У Вас есть три отличных строки, = плавание свободного, и запятая, которая собирается указать, что Вы на самом деле используете два параметра и не всего один. Если бы у Вас есть отладка, включенная, Вы видели бы ошибки.

Но используйте массив. Те подобные строке запроса параметры трудно считать, трудно отредактировать, и подверженный ошибкам из-за этого. По крайней мере, это - мое взятие.

$latest_items = new WP_query( 
  array(
    'post_type' => 'ait-dir-item', 
    'cat' => 0,
    'posts_per_page' => $number,
  )
);

Кроме того, cat=0 является ненужным. Почти я могу сказать, запрос идентичен с или без него.

1
20.02.2020, 01:42

Я - обзор Ваш код совершенно, но проблема находится в wp_query parameter.so, замените эту строку к моей новой

$latest_items = WP_query( 'post_type=ait-dir-item&cat=0&posts_per_page=' . $number )

это поможет. Я уверен в этом.

-1
20.02.2020, 01:42
  • 1
    не это не будет-> $latest_items = new WP_query( 'post_type=ait-dir-item&cat=0&posts_per_page=' . $number ); –  JMau 11.06.2013, 15:26
  • 2
    удостоверяется, что Ваш пользовательский тип сообщения имеет сообщения. и используйте этого после эха $latest_items" <пред>"; print_r ($latest_items); отзовитесь эхом" </пред>"; –  Pradipta Sarkar 11.06.2013, 15:31
  • 3
    я серьезно сомневаюсь относительно WP_query, будет работать в этом контексте, он лучше использует query_posts() разве плюс Charlyem кодер не то, итак, почему он должен распечатать запрос? –  JMau 11.06.2013, 15:37
  • 4
    Это, конечно, не лучше для использования query_posts, @TweetPressFr. Вы могли бы извлечь выгоду из чтения этого Вопросам и ответам. И в направлении Pradipta: WP_Query класс и потребности как таковые, которые инстанцируют с помощью new ключевое слово. –  Johannes Pille 11.06.2013, 17:05
  • 5
    я сомневаюсь относительно Charlyem, знает запросы, он не кодер. Таким образом, этот ответ не был достаточно хорош мне. Но тем не менее Вы правы для query_post (), я должен был быть более осторожным. большое спасибо –  JMau 11.06.2013, 18:03

Теги

Похожие вопросы