1. David Wu首页
  2. WordPress
  3. WordPress安装教程

Elementor 文章列表模块添加视频弹出和无限加载效果

视频弹出和瀑无限加载效果是 Elementor 高级版中包含的页面效果,但是只为这个效果就去购买高级版非常没有性价比。其实 Elementor 免费版也是可以实现这个效果的,而且并不需要太多代码。

视频弹出效果和无限加载效果肯定是通过 JavaScript 实现的,在本文所提到的案例中,我们使用的是 Magnific Popup 和 jQuery Infinite Ajax Scroll 这两个库,首先我们需要引入这两个库(这两个库我们已经在主题中注册过了,所以我们在这里省略了注册的代码)。

  1. add_action('wp_enqueue_scripts', function ()
  2. {
  3.     if (is_page(178)) {
  4.         wp_enqueue_script('wprs-jquery-ias');
  5.         wp_enqueue_style('wprs-magnific-popup');
  6.         wp_enqueue_script('wprs-magnific-popup');
  7.     }
  8. });

因为我们只需要在某个页面中实现这两个效果,所以在添加代码的时候,我们需要做一个判断,只有当前页面是我们所需的页面时,才添加这两个 JS 库。

添加 Popup 和无限加载效果 JS 代码到所需的页面,因为我们已经在上面的代码中引入了所需的 JavaScript 库,我们直接把实现这两个效果的 JS 实例代码添加到对应页面的页脚即可。当然,如果你喜欢,也可以添加到网站的 JS 文件中统一管理。

  1. add_action('wp_footer', function ()
  2. {
  3.     if ( ! is_page(178)) {
  4.         return;
  5.     }
  6.     ?>
  7.     <script>
  8.         jQuery(document).ready(function($) {
  9.             function activatePopup() {
  10.                 $('#feedback-videos .elementor-post__thumbnail__link').magnificPopup({
  11.                     disableOn   : 700,
  12.                     type        : 'iframe',
  13.                     mainClass   : 'mfp-fade',
  14.                     removalDelay: 160,
  15.                     preloader   : false,
  16.                     fixedContentPos: false,
  17.                 });
  18.             }
  19. 
    
  20.             activatePopup();
  21. 
    
  22.             var ias = jQuery.ias({
  23.                 container : '.elementor-posts-container',
  24.                 item      : 'article.elementor-post',
  25.                 pagination: 'nav.elementor-pagination',
  26.                 next      : 'nav.elementor-pagination a.next',
  27.             });
  28. 
    
  29.             ias.extension(new IASSpinnerExtension());
  30.             ias.extension(new IASTriggerExtension({offset: 2}));
  31.             ias.extension(new IASNoneLeftExtension({text: 'You reached the end'}));
  32.             ias.extension(new IASPagingExtension({text: 'View More Videos'}));
  33.             ias.extension(new IASHistoryExtension({prev: '#pagination a.prev'}));
  34. 
    
  35.             ias.on('rendered', function(items) {
  36.                 activatePopup();
  37.             });
  38.         });
  39.     </script>
  40. <?php });

有了上面的代码,页面列表无限加载的效果已经实现了,但是视频弹出还需要进一步处理才能实现。

修改文章链接为视频链接,Magnific Popup 弹出的视频是直接使用的链接中的视频地址,所以,我们需要修改列表中的文章链接为视频链接地址。我们可以通过 post_type_link 这个 Filter 来修改文章链接地址,下面的代码中,我们把 「feedback」文章类型的链接修改为 「_video_url」这个文章自定义字段中设置的视频链接。

  1. add_filter('post_type_link', function ($permalink, $post, $leavename)
  2. {
  3.     if ($post->post_type === 'feedback') {
  4.         $video_url = get_post_meta($post->ID, '_video_url', true);
  5. 
    
  6.         if ($video_url) {
  7.             $permalink = $video_url;
  8.         }
  9.     }
  10. 
    
  11.     return $permalink;
  12. }, 999, 3);

至此,在 Elementor 中实现视频弹出和无限加载的功能已经全部实现,主要使用了 wp_enqueue_scripts Action 来加载 JS 库,使用 wp_footer Action 来添加实例 JS 代码,使用了 post_type_link Filter 来修改文章链接为视频链接,全程没有修改 wordpress 或 Elementor 的核心代码,所以不会影响 WordPress 或 Elementor 升级,兼容性也不错。

原创文章,作者:DavidWu,如若转载,请注明出处:https://www.davidwu.net/archives/103145

服务项目 服务内容 收费标准(元)
开发定制 WordPress主题/插件开发定制 (以最终需求为准)
主题/插件汉化 汉化团队WordPress主题/插件,翻译率95% (以标的主题/插件的句子数量为准)
服务器环境配置 基于您现有服务器,搭建配置网站运行环境,结合我们多年来实战经验,可完美支持WordPress等PHP程序运行,并配置伪静态规则、优化目录权限等问题。服务器我们强烈推荐使用Linux系统。 100元/次
网站托管 若贵站目前尚无技术人员,无法完成服务器环境配置,可选择我们的网站托管服务,直接交付正常运行的WordPress站点,并且无需担心服务器的后续维护工作,一切都由我们来帮您完成。 标配套餐:1000元/年/站点 高配套餐:联系客服获取
网站加速优化 从服务器后端配置优化到WordPress数据库缓存、前端页面缓存、JS和CSS压缩合并,全方位优化网站加载速度,实现秒开。(此服务仅针对(云)服务器/VPS) 500元/次(仅站内优化200元/次)
主题配置 本站所有主题均支持,可快速实现,若有任何问题可以咨询客服解决,若您希望我们提供配置服务,可选购此服务。 英文主题安装 60元/次 汉化主题安装 30元/次
HTTPS配置 HTTPS已经不断普及,并且有着更高的安全性以及SEO上的优待。该服务收取的为服务费,SSL证书产生的费用请自行承担。 100元/次
网站搬家 迁移网站所有文件和数据库信息、网站相关配置的调整、以及迁移中的疑难问题故障排除。 标准收费:500元/次 若网站数据量大,需协商
网站运维 提供整站的运维服务,保证网站正常运行。包含:网站故障定位及排除、网站数据备份和恢复、网站攻击及木马等问题的处理等 标准收费:2000元/年 IP 5000以上需协商

发表评论

邮箱地址不会被公开。 必填项已用*标注