Elementor自定义小部件中的循环不起作用

时间:2019-10-24 作者:lastnoob

我有一个为elementor定制的小部件,但我的问题是,获取帖子的循环不能正常工作。目前,它返回插入小部件的页面标题,不显示实际帖子。以下是我的代码的相关部分:

    $args  = array(
        \'posts_per_page\'  => 12,
        \'category_name\'   => \'featured\',
        \'orderby\'         => \'post_date\',
        \'order\'           => \'ASC\',
        \'post_type\'       => \'post\',
        \'suppress_filters\' => true ); 
    $posts = get_posts($args);
        foreach ($posts as $post) :




            echo \'<div class="posts-carousel swiper-container">\';
            echo \'<div class="swiper-wrapper">\';

            echo    \'<div class="swiper-slide carousel-post" style="background:url(\';
            echo the_post_thumbnail(\'large\');
            echo \');"><div class="text">\';
            echo the_title();
            echo \'</div><div class="overlay"></div></div>\';

            echo \'</div>\';

            echo    \'<div class="swiper-pagination"></div>\';

            echo    \'<div class="swiper-button-prev"></div>\';
            echo    \'<div class="swiper-button-next"></div>\';
            echo \'</div>\';

        endforeach;
谁知道我该怎么做?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

我建议切换到标准post循环:

    $args  = [
        \'posts_per_page\'  => 12,
        \'category_name\'   => \'featured\',
        \'orderby\'         => \'post_date\',
        \'order\'           => \'ASC\',
    ]; 
    $query = new \\WP_Query($args);
    if ( $query->have_posts() ) {
        while ( $query->have_posts() ) {
            $query->the_post();
            .....
        }
        \\wp_reset_postdata();
    }
请注意,我:

切换到的现代PHP数组语法[] 而不是array()\\WP_Query 循环检查是否确实找到了任何帖子,提供了一种添加else 带有“找不到帖子”消息的语句切换为标准PHP语法{} 括号而非备用语法修复了调用的缩进the_post() 设置当前职位,相当于setup_postdata( $post ); 但是清洁工打电话来了wp_reset_postdata() 要在循环后进行清理,以便下一段代码获得正确的帖子,而不是循环迭代的最后一篇帖子,请删除post_type 参数,因为默认的帖子类型已经是post\\ 为了确保它从全局名称空间中提取WP函数,我有两个不相关的注释:

返回值和the_ 功能我发现了这些:

            echo the_post_thumbnail(\'large\');

            echo the_title();
这些函数不向返回值echo, 这不是他们的工作方式。它们相当于:

echo \'\';
the_post_thumbnail(\'large\');
echo \'\';
the_title();
所以不要使用echo, 以开头的任何其他WP函数也是如此the_ 例如the_content, 等等。如果确实需要返回值以便将其放入变量中,请使用等效值get_ 样式功能。

旋转木马标记

如果我理解正确,如果找到5个帖子,将有5个旋转木马,每个都有一个帖子。我会将旋转木马容器标记移动到循环之前和之后,以便在其中只输出当前幻灯片/项目。

但总体而言,旋转木马的用户体验太差,可访问性差,复杂性高,在性能和CSS/JS权重方面开销很大。您最好使用英雄模式或某种特色网格,旋转木马的可发现性极低,因此任何旋转木马都将与显示第一个项目而不显示其余项目一样有效。背景\'posts_per_page\' => 1 将同样有效。