集成FishPig后,如何在Magento2首页显示2篇WordPress最新博客?
解决FishPig与Magento2集成后首页仅显示单篇博客文章的问题
我看了你的代码,问题主要出在集合加载的语法错误和一处HTML标签的小问题上,下面帮你一步步修正:
问题分析
- 错误的
load()方法调用:你在集合末尾用了load(2),但FishPig的Post\Collection类中,load()方法的参数并不是要加载的条目数量,而是用来加载特定ID的单条记录。这就导致你只加载了ID为2的那一篇文章,自然只能显示单篇。 setPageSize设置不符需求:你设置了setPageSize(5)但实际想显示2篇,这里数值需要对应。- 图片标签重复
src属性:你的<img>标签里写了两个src,这是无效的HTML语法,应该把第二个改成alt属性。
修正后的代码
<?php // 注意:虽然ObjectManager可以工作,但Magento官方推荐使用依赖注入,这里先按你的写法修正 $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $posts = $objectManager->create('FishPig\WordPress\Model\ResourceModel\Post\Collection') ->addPostTypeFilter('post') ->setOrderByPostDate() // 按发布日期倒序,默认就是最新在前 ->addIsViewableFilter() ->setPageSize(2) // 设置每页显示2篇 ->setPage(1, 2) // 确保取第一页的2条(可选,但更严谨) ->load(); // 无参调用load()加载整个集合 ?> <?php if (count($posts) > 0): ?> <ul> <?php foreach($posts as $post): ?> <li> <a href="<?php echo $post->getUrl() ?>"><?php echo $this->escapeHtml($post->getPostTitle()) ?></a> <?php if ($image = $post->getFeaturedImage()): ?> <a href="<?php echo $post->getUrl() ?>"> <img src="<?php echo $image->getAvailableImage() ?>" alt="<?php echo $this->escapeHtml($post->getPostTitle()) ?>" /> </a> <?php endif; ?> <p><?php echo $post->getPostExcerpt(40) ?></p> </li> <?php endforeach; ?> </ul> <?php endif; ?>
额外建议
尽量避免直接使用ObjectManager,按照Magento2的最佳实践,你应该在对应的Block类中通过依赖注入获取FishPig\WordPress\Model\ResourceModel\Post\CollectionFactory,然后在Block里创建集合,再在phtml中调用Block的方法获取数据。这样代码更易维护,也符合Magento的架构规范。
内容的提问来源于stack exchange,提问作者arvind jha
相关产品推荐
相关产品推荐

