Как я могу изменить длину фрагмента CPT-цикла на типе поста "страница"? - PullRequest
0 голосов
/ 30 апреля 2019

Когда я зацикливаюсь на CPT на моей домашней странице, он отображается правильно, но я не могу контролировать длину выдержки.

Я хочу просмотреть 4 разных CPT на моей первой странице. Цикл работает, но моя условная логика для управления длиной отрывка не работает, как ожидалось, потому что get_post_type возвращает «страницу», а не фактический CPT.

Это в моих функциях. Php:

add_filter('excerpt_length', 'll_get_excerpt_length');

function ll_get_excerpt_length($size) {

    if (is_post_type_archive('post')) {
        return 40;
    } elseif (is_post_type_archive('podcast')) {
        return 15;
    } elseif (is_post_type_archive('review')) {
        return 5;
    } else {
        return $size;
    }
}

при выгрузке var типа записи я получаю "страницу", поэтому я не знаю, где и как контролировать различные длины выдержки.

Я ожидал, что длина выдержки будет правильной для каждой петли CPT на моей первой странице.

Когда я добавляю следующее с помощью print_r, я только вхожу в функцию, но не в ifs.

add_filter('excerpt_length', 'll_get_excerpt_length');

function ll_get_excerpt_length($size) {
   print_r(get_post_type());
    if (is_post_type_archive('post')) {
        print_r(get_post_type());
        return 40;
    } elseif (is_post_type_archive('podcast')) {
         print_r(get_post_type());
        return 15;
    } elseif (is_post_type_archive('review')) {
         print_r(get_post_type());
        return 5;
    } else {
        return $size;
    }
}

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

is_post_type_archive вернет true, только если вы находитесь на странице архива, если вы не проверяете is_single (), is_singular ('podcast') вместо этого?

0 голосов
/ 30 апреля 2019

Попробуйте использовать так:

add_filter('excerpt_length', 'll_get_excerpt_length');

function ll_get_excerpt_length( $size ) {
    if ( is_archive() ) {
        return 40;
    } elseif (is_post_type_archive('podcast')) {
        return 15;
    } elseif (is_post_type_archive('review')) {
        return 5;
    } else {
        return $size;
    }
}

is_post_type_archive () возвращает true только в том случае, если это CPT, а атрибут has_archive для CPT имеет значение true следующим образом:

add_action( 'init', 'create_post_type' );

function create_post_type() {
  register_post_type( 'review',
    array(
      'labels' => array(
        'name' => __( 'Reviews' ),
        'singular_name' => __( 'Review' )
      ),
      'public' => true,
      'has_archive' => true, //like this
    )
  );
}

Спасибо!

...