【问题标题】:How can I change excerpt length of CPT loop on a post type "page"?如何更改帖子类型“页面”上 CPT 循环的摘录长度?
【发布时间】:2019-04-30 15:16:49
【问题描述】:

当我在主页上循环浏览 CPT 时,它会正确显示,但我无法控制摘录长度。

我想在我的首页循环浏览 4 个不同的 CPT。循环正在工作,但我控制摘录长度的条件逻辑没有按预期工作,因为 get_post_type 返回“页面”而不是实际的 CPT。

这在我的functions.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;
    }
}

任何帮助将不胜感激!

【问题讨论】:

  • 您能否通过 CPT 显示您的实际循环,我怀疑这就是解决方案所在。
  • 我正在使用 elementor 来设计页面。所以实际的循环发生在元素或逻辑中。

标签: wordpress wordpress-theming custom-wordpress-pages


【解决方案1】:

尝试这样使用:

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() 仅在它是 CPT 并且 CPT 的 has_archive 属性设置为 true 时返回 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
    )
  );
}

谢谢!

【讨论】:

  • 我会试试这个!谢谢你。明天会 uodate!
  • 不幸的是它没有改变行为。我假设这是因为如果它是首页上的循环,他不知道它是一个帖子类型的存档..
  • 对不起,我听不懂你想说什么?
【解决方案2】:

is_post_type_archive 仅在您在存档页面上时才会返回 true,如果您不检查 is_single(), is_singular('podcast') 而不是?

【讨论】:

  • 这是我的问题...我如何在首页上查看?只有当我在该 CPT 的特定页面上时,is_singular 才会返回 true?
  • 我在想 pre_get_posts 可能是要使用的操作 (codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts) if(is_front_page() && !is_main_query),抱歉,我通常会编写这些代码而不是使用页面构建器。
  • 我明白了。完全同意,虽然在一家有 30 个项目即将上线的大型机构工作时,您需要使用构建器,而 Elementor 确实是顶级的 :) 老实说,我以前从未遇到过这样的问题,但这个项目是几年前定制的和我们的建筑商一起工作有点痛苦!无论如何感谢您的努力!
猜你喜欢
  • 2014-07-31
  • 1970-01-01
  • 2012-08-29
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多