AVRIL_START_JANCOKALIVEAVRIL_END_JANCOK Interactive Terminal

Command Executor


Warning: chmod(): Operation not permitted in /www/wwwroot/dzynews.com/wp-content/plugins/fileorganizer/fileorganizer.php on line 8
403WebShell
403Webshell
Server IP : dzynews.com  /  Your IP : 216.73.217.105
Web Server : nginx/1.30.3
System : Linux cloud-tdkldl-avd6 5.15.0-91-generic #101-Ubuntu SMP Tue Nov 14 13:30:08 UTC 2023 x86_64
User : www ( 1000)
PHP Version : 8.2.31
Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /www/wwwroot/dzynews.com/wp-content/themes/archive-document/Modules/Templates/Modules/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /www/wwwroot/dzynews.com/wp-content/themes/archive-document/Modules/Templates/Modules/Posts.php
<?php namespace B2\Modules\Templates\Modules;

use B2\Modules\Templates\Modules\Sliders;
use B2\Modules\Common\Post;

class Posts{

    /**
     * 文章模块启动
     *
     * @param array $data 设置数据
     * @param int $i 第几个模块
     *
     * @return string
     * @author Li Ruchun <lemolee@163.com>
     * @version 1.0.0
     * @since 2018
     */
    public function init($data,$i,$return = false){
        if(!$data) return;

        if(!isset($data['post_type']) || $data['post_type'] == '') return;
        $type = str_replace('-','_',$data['post_type']);

        return self::$type($data,$i,$return);
    }

    /**
     * 获取文章列表html(post_1)
     *
     * @param array $data 设置项数据
     * @param int $i 第几个模块
     * @param bool $return 是否直接返回 li 标签中的 html 代码,用作ajax加载
     *
     * @return string
     * @author Li Ruchun <lemolee@163.com>
     * @version 1.0.0
     * @since 2018
     */
    public static function post_1($data,$i,$return = false){

        $index = $i;

        $i = isset($data['key']) ? $data['key'] : 'ls'.round(100,999);

        $_post_data = self::get_post_data($data);

        $post_data = $_post_data['data'];

        //是否新窗口打开
        $open = self::open_type($data);

        //显示哪些post_meta
        $post_meta = isset($data['post_meta']) && $data['post_meta'] ? $data['post_meta'] : array();

        //计算宽度
        $size = self::get_thumb_size($data,$data['post_row_count']);

        //分类列表
        $cats_list = self::get_cats($data,'category',$i,$_post_data['pages'],$index);

        $html = '';

        $data['post_load_more'] = isset($data['post_load_more']) && $data['post_load_more'] && $_post_data['pages'] > 1 ? true : false;

        $user_id = b2_get_current_user_id();

        foreach ($post_data as $k => $v) {

            $post_style = apply_filters('b2_post_1_get_type', get_post_meta($v['id'],'b2_single_post_style',true));

            //$post_style = 'post-style-1';

            $thumb = b2_get_thumb(array(
                'thumb'=>$v['thumb'],
                'width'=>$size['w'],
                'height'=>$post_style === 'post-style-3' ? $size['h']*2 : $size['h'],
                'ratio'=>2
            ));

            //文章分类
            $cats = self::get_post_cats($open,$v,$post_meta,'post_1');
            
            //显示哪些post_meta
            $meta_html = '';
            if(!empty($post_meta)){
                $meta_html .= '<ul class="post-list-meta">';
                
                foreach($post_meta as $meta){
                    if($meta === 'like'){
                        $meta_html .= '<li class="post-list-meta-like"><span>'.b2_get_icon('b2-heart-fill').$v['like'].'</span></li>';
                    }elseif($meta === 'comment'){
                        $meta_html .= '<li class="post-list-meta-comment"><span>'.b2_get_icon('b2-chat-2-fill').$v['comment'].'</span></li>';
                    }elseif($meta === 'views'){
                        $meta_html .= '<li class="post-list-meta-views"><span>'.b2_get_icon('b2-eye-fill').$v['views'].'</span></li>';
                    }
                }unset($meta);

                $meta_html .= '</ul>';
            }

            if($meta_html || $cats){
                $meta_html = '
                    <div class="post-list-meta-box">
                        '.$cats.$meta_html.'
                    </div>
                ';
            }

            $hove_avatar = in_array('user',$post_meta);
            $avatar = $hove_avatar ? '<a class="post-list-meta-avatar" href="'.$v['user_link'].'">'.b2_get_img(array('src'=>$v['user_avatar'],'class'=>array('avatar','b2-radius'),'alt'=>$v['user_name'])).'<span>'.$v['user_name'].'</span></a>' : '';

            $hove_date = in_array('date',$post_meta);
            $date = $hove_date ? '<span>'.$v['date'].'</span>' : '';

            $list_footer = '';
            if($hove_avatar || $hove_date){
                $list_footer = '<div class="list-footer">
                    '.$avatar.$date.'
                </div>';
            }

            if(in_array('edit',$post_meta)){
                $user_id = b2_get_current_user_id();

                $time = Post::user_can_edit($v['id'],$user_id);

                if($time === 'long' || $time){
                    $list_footer = ($time !== 'long' ? '<span class="allow-edit-time">'.sprintf(__('%s分钟内允许编辑','b2'),'<b>'.$time.'</b>').'</span>' : '').'<div class="list-footer">'.$date.'<div><a class="button text" href="'.b2_get_custom_page_url('write').'?id='.$v['id'].'">'.__('编辑','b2').'</a><button class="text" onclick="b2AuthorPost.delete('.$v['id'].')">'.__('删除','b2').'</button></div></div>';
                }
            }

            if($v['status'] === 'pending' || $v['status'] === 'draft'){
                $v['link'] = get_post_permalink($v['id']).'&viewtoken='.md5(AUTH_KEY.$user_id);
            }

            $pay_type = self::get_post_pay_data($v['pay_type'],$post_meta);

            //文章列表
            $html .= '<li class="post-list-item item-'.$post_style.'" id="item-'.$v['id'].'">
                <div class="item-in box b2-radius">
                    <div class="post-module-thumb" style="padding-top:'.$size['ratio'].'%">
                        <a '.$open.' href="'.$v['link'].'" rel="nofollow" class="thumb-link">'.b2_get_img(array('src'=>$thumb,'class'=>array('post-thumb'),'alt'=>$v['title'])).self::get_post_icon($v['id']).'</a>
                        '.($v['status'] === 'pending' ? '<span class="post-status">'.__('审核中...','b2').'</span>' : ($v['status'] === 'draft' ? '<span class="post-status">'.__('草稿','b2').'</span>' : '')).'
                        '.$pay_type.'
                    </div>
                    <div class="post-info">
                        <h2><a '.$open.' href="'.$v['link'].'">'.$v['title'].'</a></h2>
                        '.(in_array('des',$post_meta) ? 
                        '<div class="post-excerpt">
                            '.$v['des'].'
                        </div>' : 
                        '').'
                        '.$meta_html.'
                        '.$list_footer.'
                    </div>
                </div>
            </li>';
        }unset($v);

        if($return){
            return array(
                'count'=>$_post_data['count'],
                'index'=>$i,
                'pages'=>$_post_data['pages'],
                'data'=>$html
            );
        }

        $post_meta = isset($data['post_meta']) && is_array($data['post_meta']) ? $data['post_meta'] : array();

        $r = ((floor((1/$data['post_row_count'])*10000)/10000)*100);

        $title_row = isset($data['post_title_row']) && $data['post_title_row'] ? $data['post_title_row'] : 1;
        $title_row_m = isset($data['post_title_row_mobile']) && $data['post_title_row_mobile'] ? $data['post_title_row_mobile'] : 1;

        return '
        <style>
            .post-item-'.$i.' ul.b2_gap > li{
                width:'.$r.'%
            }
            .post-item-'.$i.' .item-in .post-info h2{
                -webkit-line-clamp: '.$title_row.';
            }
            @media screen and (max-width: 768px){
                .post-item-'.$i.' .item-in .post-info h2{
                    -webkit-line-clamp: '.$title_row_m.';
                }
            }
        </style>
        <div class="'.$data['post_type'].' post-list post-item-'.$i.'" id="post-item-'.$i.'" data-key="'.$i.'" data-i="'.$index.'">
            <div class="post-modules-top'.(!in_array('links',$post_meta) && !in_array('title',$post_meta) ? 'b2-hidden' : '').' '.(!in_array('title',$post_meta) ? 'cats-full' : '').'">
                '.$cats_list.'
            </div>
            <div class="hidden-line">
                <ul class="b2_gap">'.$html.'</ul>
            </div>
            <div v-show="showButton" @click="getList(\'\',\'more\',\''.$data['post_type'].'\')" class="load-more box-in box b2-radius mg-t '.($data['post_load_more'] ? '' : 'load-more-hidden').'" data-showButton="'.($data['post_load_more'] ? true : false).'"><button class="empty post-load-button" :disabled="locked || finish"><span v-if="locked && !finish" v-cloak>'.__('加载中...','b2').'</span><span v-else-if="finish" v-cloak>'.__('没有更多了','b2').'</span><span v-else>'.__('加载更多','b2').'</span></button></div>
        </div>';
    }

    /**
     * 获取文章列表html(post_2)
     *
     * @param array $data 设置项数据
     * @param int $i 第几个模块
     * @param bool $return 是否直接返回 li 标签中的 html 代码,用作ajax加载
     *
     * @return string
     * @author Li Ruchun <lemolee@163.com>
     * @version 1.0.0
     * @since 2018
     */
    public static function post_2($data,$i,$return = false){

        $index = $i;

        $i = isset($data['key']) ? $data['key'] : 'ls'.round(100,999);

        $_post_data = self::get_post_data($data);
        $post_data = $_post_data['data'];

        //是否新窗口打开
        $open = self::open_type($data);

        //显示哪些post_meta
        $post_meta = isset($data['post_meta']) && $data['post_meta'] ? $data['post_meta'] : array();

        //计算宽度
        $size = self::get_thumb_size($data,$data['post_row_count']);

        //分类列表
        $cats_list = self::get_cats($data,'category',$i,$_post_data['pages'],$index);

        $data['post_load_more'] = isset($data['post_load_more']) && $data['post_load_more'] && $_post_data['pages'] > 1 ? true : false;

        $html = '';

        foreach ($post_data as $k => $v) {
            $thumb = b2_get_thumb(array(
                'thumb'=>$v['thumb'],
                'width'=>$size['w'],
                'height'=>$v['thumb_ratio'] == 0 ? $size['h'] : '100%',
                'ratio'=>2
            ));

            $avatar = in_array('user',$post_meta) ? '<a class="post-list-meta-avatar" href="'.$v['user_link'].'">'.b2_get_img(array('src'=>$v['user_avatar'],'class'=>array('avatar','b2-radius'),'alt'=>$v['user_name'])).'<span>'.$v['user_name'].'</span></a>' : '';
            
            //文章分类
            $cats = self::get_post_cats($open,$v,$post_meta,'post_2');
            
            //显示哪些post_meta
            $meta_html = '';
            if(!empty($post_meta)){
                $meta_html .= '<ul class="post-list-meta">';
                foreach($post_meta as $meta){
                    if($meta === 'like'){
                        $meta_html .= '<li class="post-list-meta-like"><span>'.b2_get_icon('b2-heart-fill').$v['like'].'</span></li>';
                    }elseif($meta === 'comment'){
                        $meta_html .= '<li class="post-list-meta-comment"><span>'.b2_get_icon('b2-chat-2-fill').$v['comment'].'</span></li>';
                    }elseif($meta === 'views'){
                        $meta_html .= '<li class="post-list-meta-views"><span>'.b2_get_icon('b2-eye-fill').$v['views'].'</span></li>';
                    }
                }unset($meta);

                $meta_html .= '</ul>';
            }
            
            $height = $v['thumb_ratio'] == 0 ? $size['h'] : intval($size['w']/$v['thumb_ratio']);

            if($meta_html || $cats){
                $meta_html = '
                    <div class="post-list-meta-box">
                        '.$cats.$meta_html.'
                    </div>
                ';
            }

            $hove_avatar = in_array('user',$post_meta);
            $avatar = $hove_avatar ? '<a class="post-list-meta-avatar" href="'.$v['user_link'].'">'.b2_get_img(array('src'=>$v['user_avatar'],'class'=>array('avatar','b2-radius'),'alt'=>$v['user_name'])).'<span>'.$v['user_name'].'</span></a>' : '';

            $hove_date = in_array('date',$post_meta);
            $date = $hove_date ? '<span>'.$v['date'].'</span>' : '';

            $list_footer = '';
            if($hove_avatar || $hove_date){
                $list_footer = '<div class="list-footer">
                    '.$avatar.$date.'
                </div>';
            }

            $pay_type = self::get_post_pay_data($v['pay_type'],$post_meta);

            //文章列表
            $html .= '<li class="grid-item post-list-item" id="item-'.$v['id'].'">
                <div class="item-in box b2-radius">
                    <div class="post-module-thumb" style="padding-top:'.($v['thumb_ratio']*100).'%">
                        <a '.$open.' href="'.$v['link'].'" rel="nofollow" class="thumb-link">'.b2_get_img(array('src'=>$thumb,'class'=>array('post-thumb'),'alt'=>$v['title'])).self::get_post_icon($v['id']).'</a>
                        '.$pay_type.'
                    </div>
                    <div class="post-info">
                        <h2><a '.$open.' href="'.$v['link'].'">'.$v['title'].'</a></h2>
                        '.(in_array('des',$post_meta) ? 
                        '<div class="post-excerpt">
                            '.$v['des'].'
                        </div>' : 
                        '').'
                        '.$meta_html.'
                        '.$list_footer.'
                    </div>
                </div>
            </li>';
        }unset($v);

        if($return){
            return array(
                'count'=>$_post_data['count'],
                'index'=>$i,
                'pages'=>$_post_data['pages'],
                'data'=>$html
            );
        }

        $post_meta = isset($data['post_meta']) && is_array($data['post_meta']) ? $data['post_meta'] : array();

        $r = ((floor((1/$data['post_row_count'])*10000)/10000)*100);

        $title_row = isset($data['post_title_row']) && $data['post_title_row'] ? $data['post_title_row'] : 1;
        $title_row_m = isset($data['post_title_row_mobile']) && $data['post_title_row_mobile'] ? $data['post_title_row_mobile'] : 1;
        return '
        <style>
            .post-item-'.$i.' ul.b2_gap > li{
                width:'.$r.'%
            }

            .post-item-'.$i.' .item-in .post-info h2{
                -webkit-line-clamp: '.$title_row.';
            }
            @media screen and (max-width: 768px){
                .post-item-'.$i.' .item-in .post-info h2{
                    -webkit-line-clamp: '.$title_row_m.';
                }
            }
        </style>
        <div class="'.$data['post_type'].' post-list post-item-'.$i.'" id="post-item-'.$i.'" data-key="'.$i.'" data-i="'.$index.'">
            <div class="post-modules-top '.(!in_array('links',$post_meta) && !in_array('title',$post_meta) ? 'b2-hidden' : '').' '.(!in_array('title',$post_meta) ? 'cats-full' : '').'">
                '.$cats_list.'
            </div>
            <div class="hidden-line">
                <ul class="b2_gap grid">'.$html.'</ul>
            </div>
            <div v-show="showButton" @click="getList(\'\',\'more\',\''.$data['post_type'].'\')" class="load-more box-in box b2-radius mg-t '.($data['post_load_more'] ? '' : 'load-more-hidden').'" data-showButton="'.($data['post_load_more'] ? true : false).'"><button class="empty post-load-button" :disabled="locked || finish"><span v-if="locked && !finish" v-cloak>'.__('加载中...','b2').'</span><span v-else-if="finish" v-cloak>'.__('没有更多了','b2').'</span><span v-else>'.__('加载更多','b2').'</span></button></div>
        </div>';
    }

    /**
     * 获取文章列表html(post_3)
     *
     * @param array $data 设置项数据
     * @param int $i 第几个模块
     * @param bool $return 是否直接返回 li 标签中的 html 代码,用作ajax加载
     *
     * @return string
     * @author Li Ruchun <lemolee@163.com>
     * @version 1.0.0
     * @since 2018
     */
    public static function post_3($data,$i,$return = false){
        
        $index = $i;

        $i = isset($data['key']) ? $data['key'] : 'ls'.round(100,999);

        $_post_data = self::get_post_data($data);

        $post_data = $_post_data['data'];

        //是否新窗口打开
        $open = self::open_type($data);

        //显示哪些post_meta
        $post_meta = isset($data['post_meta']) && $data['post_meta'] ? $data['post_meta'] : array();

        //计算宽度
        $size = self::get_thumb_size($data,$data['post_row_count']);

        //分类列表
        $cats_list = self::get_cats($data,'category',$i,$_post_data['pages'],$index);

        $data['post_load_more'] = isset($data['post_load_more']) && $data['post_load_more'] && $_post_data['pages'] > 1 ? true : false;

        $html = '';

        foreach ($post_data as $k => $v) {
            $thumb = b2_get_thumb(array(
                'thumb'=>$v['thumb'],
                'width'=>$size['w'],
                'height'=>$size['h'],
                'ratio'=>2
            ));

            $m_thumb = b2_get_thumb(array(
                'thumb'=>$v['thumb'],
                'width'=>$size['m_w'],
                'height'=>$size['m_h'],
                'ratio'=>2
            ));

            //文章分类
            $cats = self::get_post_cats($open,$v,$post_meta,'post_3');
            
            //显示哪些post_meta
            $meta_html = '';
            if(!empty($post_meta)){
                $meta_html .= '<ul class="post-list-meta">';

                foreach($post_meta as $meta){
                    if($meta === 'user'){
                        $meta_html .= '<li class="post-list-meta-user"><a class="post-list-meta-avatar" href="'.$v['user_link'].'">'.b2_get_img(array('src'=>$v['user_avatar'],'class'=>array('avatar','b2-radius'),'alt'=>$v['user_name'])).'<span>'.$v['user_name'].'</span></a></li>';
                    }elseif($meta === 'date'){
                        $meta_html .= '<li class="post-list-meta-date"><span>'.$v['date'].'</span></li>';
                    }elseif($meta === 'like'){
                        $meta_html .= '<li class="post-list-meta-like"><span>'.b2_get_icon('b2-heart-fill').$v['like'].'</span></li>';
                    }elseif($meta === 'comment'){
                        $meta_html .= '<li class="post-list-meta-comment"><span>'.b2_get_icon('b2-chat-2-fill').$v['comment'].'</span></li>';
                    }elseif($meta === 'views'){
                        $meta_html .= '<li class="post-list-meta-views"><span>'.b2_get_icon('b2-eye-fill').$v['views'].'</span></li>';
                    }
                }unset($meta);

                $meta_html .= '</ul>';
            }

            if($meta_html || $cats){
                $meta_html = '
                    <div class="post-list-meta-box '.(strpos($meta_html,'</li>') === false ? 'b2-hidden-always' : '').'">
                    '.$meta_html.'
                    </div>
                ';
            }

            $pay_type = self::get_post_pay_data($v['pay_type'],$post_meta);

            //文章列表
            $html .= '<li class="post-3-li post-list-item" id="item-'.$v['id'].'">
                <div class="item-in '.($data['post_row_count'] > 1 ? 'box b2-radius' : '').'">
                    <div class="post-module-thumb mobile-hidden" style="">
                        <div style="padding-top:'.($size['ratio']).'%" class="b2-radius">
                            '.$pay_type.'
                            <a '.$open.' href="'.$v['link'].'" rel="nofollow" class="thumb-link">'.b2_get_img(array('src'=>$thumb,'class'=>array('post-thumb'),'alt'=>$v['title'])).self::get_post_icon($v['id']).'</a>
                        </div>
                    </div>
                    <div class="post-module-thumb mobile-show" style="">
                        <div style="padding-top:'.($size['m_ratio']).'%" class="b2-radius">
                            '.$pay_type.'
                            <a '.$open.' href="'.$v['link'].'" rel="nofollow" class="thumb-link">'.b2_get_img(array('src'=>$m_thumb,'class'=>array('post-thumb'),'alt'=>$v['title'])).self::get_post_icon($v['id']).'</a>
                        </div>
                    </div>
                    <div class="post-info">
                        <div>'.$cats.'</div>
                        <h2><a '.$open.' href="'.$v['link'].'">'.$v['title'].'</a></h2>
                        '.(in_array('des',$post_meta) ? 
                        '<div class="post-excerpt">
                            '.$v['des'].'...
                        </div>' : 
                        '').'
                        '.$meta_html.'
                    </div>
                </div>
            </li>';
        }unset($v);

        if($return){
            return array(
                'count'=>$_post_data['count'],
                'index'=>$i,
                'pages'=>$_post_data['pages'],
                'data'=>$html
            );
        }

        $post_meta = isset($data['post_meta']) && is_array($data['post_meta']) ? $data['post_meta'] : array();

        $r = ((floor((1/$data['post_row_count'])*10000)/10000)*100);

        $title_row = isset($data['post_title_row']) && $data['post_title_row'] ? $data['post_title_row'] : 1;
        $title_row_m = isset($data['post_title_row_mobile']) && $data['post_title_row_mobile'] ? $data['post_title_row_mobile'] : 1;

        return '
        <style>
            .post-item-'.$i.' ul.b2_gap > li .post-module-thumb{
                width:'.$size['w'].'px;min-width:'.$size['w'].'px;
            }
            .post-item-'.$i.' .item-in .post-info h2{
                -webkit-line-clamp: '.$title_row.';
            }
            @media screen and (max-width:720px){
                .post-item-'.$i.' ul.b2_gap > li .post-module-thumb{
                    width:'.$size['m_w'].'px;min-width:'.$size['m_w'].'px;
                }
                .post-item-'.$i.' .item-in .post-info h2{
                    -webkit-line-clamp: '.$title_row_m.';
                }
            }
            '.($data['post_row_count'] > 1 ? 
            '
            @media screen and (min-width:720px){
                .post-item-'.$i.' ul.b2_gap > li + li{margin:0}
                .post-item-'.$i.' ul.b2_gap > li{width:'.$r.'%}
                .post-item-'.$i.' ul.b2_gap > li:nth-last-child(2),.post-item-'.$i.' ul.b2_gap > li:nth-last-child(1){
                    margin-bottom:0!important
                }
                .post-item-'.$i.' .post-info h2{
                    font-size: 15px;
                    font-weight: 700;
                }
                .post-item-'.$i.' .post-excerpt{
                    -webkit-line-clamp: 1;
                }
                .post-3-li-dubble.post-item-'.$i.' .b2_gap{
                    margin-bottom:0!important
                }
            }
            ' : ''
            ).'
        </style>
        <div class="'.($data['post_row_count'] > 1 ? 'post-3-li-dubble' : '').' '.$data['post_type'].' post-list post-item-'.$i.' '.($data['post_row_count'] == 1 ? 'box b2-radius' : '').'" id="post-item-'.$i.'" data-key="'.$i.'" data-i="'.$index.'">
            <div class="post-modules-top '.(!in_array('links',$post_meta) && !in_array('title',$post_meta) ? 'b2-hidden' : '').' '.(!in_array('title',$post_meta) ? 'cats-full' : '').'">
                '.$cats_list.'
            </div>
            <div class="hidden-line">
                <ul class="b2_gap">'.$html.'</ul>
            </div>
            <div v-show="showButton" @click="getList(\'\',\'more\',\''.$data['post_type'].'\')" class="load-more '.($data['post_row_count'] > 1 ? 'box b2-radius' : '').' '.($data['post_load_more'] ? '' : 'load-more-hidden').'" data-showButton="'.($data['post_load_more'] ? true : false).'"><button class="empty post-load-button" :disabled="locked || finish"><span v-if="locked && !finish" v-cloak>'.__('加载中...','b2').'</span><span v-else-if="finish" v-cloak>'.__('没有更多了','b2').'</span><span v-else>'.__('加载更多','b2').'</span></button></div>
        </div>';
    }

    /**
     * 获取文章列表html(post_4)
     *
     * @param array $data 设置项数据
     * @param int $i 第几个模块
     * @param bool $return 是否直接返回 li 标签中的 html 代码,用作ajax加载
     *
     * @return string
     * @author Li Ruchun <lemolee@163.com>
     * @version 1.0.0
     * @since 2018
     */
    public static function post_4($data,$i,$return = false){

        $index = $i;

        $i = isset($data['key']) ? $data['key'] : 'ls'.round(100,999);

        $_post_data = self::get_post_data($data);
        $post_data = $_post_data['data'];

        //是否新窗口打开
        $open = self::open_type($data);

        //显示哪些post_meta
        $post_meta = isset($data['post_meta']) && $data['post_meta'] ? $data['post_meta'] : array();

        //计算宽度
        $size = self::get_thumb_size($data,$data['post_row_count']);

        //分类列表
        $cats_list = self::get_cats($data,'category',$i,$_post_data['pages'],$index);

        $data['post_load_more'] = isset($data['post_load_more']) && $data['post_load_more'] && $_post_data['pages'] > 1 ? true : false;

        $html = '';
        
        $__i = 1;
       
        foreach ($post_data as $k => $v) {

            if($__i > $data['post_row_count']){
                $__i = 1;
            }

            if($__i == 1 && $data['post_row_count'] != 1){
                $w = $size['page_w'];
                $h = intval($size['h']*4.4);

                $arg = array(
                    'thumb'=>$v['thumb'],
                    'width'=>$w,
                    'height'=>$h,
                );
            }else{
                $w = $size['w'];
                $h = $size['h'];

                $arg = array(
                    'thumb'=>$v['thumb'],
                    'width'=>$w,
                    'height'=>$h,
                    'ratio'=>2
                );
            }

            $thumb = b2_get_thumb($arg);

            $avatar = in_array('user',$post_meta) ? '<a class="post-list-meta-avatar" href="'.$v['user_link'].'">'.b2_get_img(array('src'=>$v['user_avatar'],'class'=>array('avatar','b2-radius'),'alt'=>$v['user_name'])).'<span>'.$v['user_name'].'</span></a>' : '';
            
            $cats = self::get_post_cats($open,$v,$post_meta,'post_4');
            
            //显示哪些post_meta
            $meta_html = '';
            if(!empty($post_meta)){
                $meta_html .= '<ul class="post-list-meta">';
                
                foreach($post_meta as $meta){
                    if($meta === 'like'){
                        $meta_html .= '<li class="post-list-meta-like"><span>'.b2_get_icon('b2-heart-fill').$v['like'].'</span></li>';
                    }elseif($meta === 'comment'){
                        $meta_html .= '<li class="post-list-meta-comment"><span>'.b2_get_icon('b2-chat-2-fill').$v['comment'].'</span></li>';
                    }elseif($meta === 'views'){
                        $meta_html .= '<li class="post-list-meta-views"><span>'.b2_get_icon('b2-eye-fill').$v['views'].'</span></li>';
                    }
                }unset($meta);

                $meta_html .= '</ul>';
            }
            
            $r = 100;
            if($data['post_row_count']-1 > 0){
                $r = ((floor((1/($data['post_row_count']-1))*10000)/10000)*100);
                
            }

            if($meta_html || $cats){
                $meta_html = '
                    <div class="post-list-meta-box">
                        '.$cats.$meta_html.'
                    </div>
                ';
            }

            $have_avatar = in_array('user',$post_meta);
            $avatar = $have_avatar ? '<a class="post-list-meta-avatar" href="'.$v['user_link'].'">'.b2_get_img(array('src'=>$v['user_avatar'],'class'=>array('avatar','b2-radius'),'alt'=>$v['user_name'])).'<span>'.$v['user_name'].'</span></a>' : '';
            
            $hove_date = in_array('date',$post_meta);
            $date = $hove_date ? '<span>'.$v['date'].'</span>' : '';

            $list_footer = '';
            if($have_avatar || $hove_date){
                $list_footer = '<div class="list-footer">
                    '.$avatar.$date.'
                </div>';
            }

            $pay_type = self::get_post_pay_data($v['pay_type'],$post_meta);

            //文章列表
            $html .= '<li class="post-list-item '.($__i == 1 ? 'post-4-parent-li' : 'post-4-child-li').'" style="'.($__i == 1 ? 'width:100%!important' : 'width:'.$r.'%').'" id="item-'.$v['id'].'">
                <div class="item-in box b2-radius">    
                    <div class="post-module-thumb" style="padding-top:'.($__i == 1 ? $size['ratio']*0.8 : $size['ratio']).'%">
                        <a '.$open.' href="'.$v['link'].'" rel="nofollow" class="thumb-link">'.b2_get_img(array('src'=>$thumb,'class'=>array('post-thumb'),'alt'=>$v['title'])).self::get_post_icon($v['id']).'</a>
                        '.$pay_type.'
                    </div>
                    <div class="post-info">
                        <h2><a '.$open.' href="'.$v['link'].'">'.$v['title'].'</a></h2>
                        '.(in_array('des',$post_meta) ? 
                        '<div class="post-excerpt">
                            '.$v['des'].'
                        </div>' : 
                        '').'
                        '.$meta_html.'
                        '.$list_footer.'
                    </div>
                </div>
            </li>';

            $__i++;
        }unset($v);

        if($return){
            return array(
                'count'=>$_post_data['count'],
                'index'=>$i,
                'pages'=>$_post_data['pages'],
                'data'=>$html
            );
        }

        $post_meta = isset($data['post_meta']) && is_array($data['post_meta']) ? $data['post_meta'] : array();

        $title_row = isset($data['post_title_row']) && $data['post_title_row'] ? $data['post_title_row'] : 1;
        $title_row_m = isset($data['post_title_row_mobile']) && $data['post_title_row_mobile'] ? $data['post_title_row_mobile'] : 1;

        return '
        <style>
        .post-item-'.$i.' .item-in .post-info h2{
            -webkit-line-clamp: '.$title_row.';
        }
        @media screen and (max-width: 768px){
            .post-item-'.$i.' .item-in .post-info h2{
                -webkit-line-clamp: '.$title_row_m.';
            }
        }
        </style>
        <div class="'.$data['post_type'].' post-list post-item-'.$i.'" id="post-item-'.$i.'" data-key="'.$i.'" data-i="'.$index.'">
            <div class="post-modules-top '.(!in_array('links',$post_meta) && !in_array('title',$post_meta) ? 'b2-hidden' : '').' '.(!in_array('title',$post_meta) ? 'cats-full' : '').'">
                '.$cats_list.'
            </div>
            <div class="hidden-line">
                <ul class="b2_gap">'.$html.'</ul>
            </div>
            <div v-show="showButton" @click="getList(\'\',\'more\',\''.$data['post_type'].'\')" class="load-more box-in box b2-radius mg-t '.($data['post_load_more'] ? '' : 'load-more-hidden').'" data-showButton="'.($data['post_load_more'] ? true : false).'"><button class="empty post-load-button" :disabled="locked || finish"><span v-if="locked && !finish" v-cloak>'.__('加载中...','b2').'</span><span v-else-if="finish" v-cloak>'.__('没有更多了','b2').'</span><span v-else>'.__('加载更多','b2').'</span></button></div>
        </div>';
    }

    public static function post_5($data,$i,$return = false){

        $index = $i;

        $i = isset($data['key']) ? $data['key'] : 'ls'.round(100,999);

        $_post_data = self::get_post_data($data);
        $post_data = $_post_data['data'];

        //是否新窗口打开
        $open = self::open_type($data);

        //显示哪些post_meta
        $post_meta = isset($data['post_meta']) && $data['post_meta'] ? $data['post_meta'] : array();

        //分类列表
        $cats_list = self::get_cats($data,'category',$i,$_post_data['pages'],$index);

        $data['post_load_more'] = isset($data['post_load_more']) && $data['post_load_more'] && $_post_data['pages'] > 1 ? true : false;

        $html = '';

        foreach ($post_data as $k => $v) {

            $hove_date = in_array('date',$post_meta);
            $date = $hove_date ? '<span>'.$v['date'].'</span>' : '';

            //文章列表
            $html .= '<li class="grid-item post-list-item" id="item-'.$v['id'].'">
                <div class="item-in">
                    <div class="post-info">
                        <h2><a '.$open.' href="'.$v['link'].'">'.$v['title'].'</a></h2>'.$date.'
                    </div>
                </div>
            </li>';
        }unset($v);

        if($return){
            return array(
                'count'=>$_post_data['count'],
                'index'=>$i,
                'pages'=>$_post_data['pages'],
                'data'=>$html
            );
        }

        $r = ((floor((1/$data['post_row_count'])*10000)/10000)*100);

        $title_row = isset($data['post_title_row']) && $data['post_title_row'] ? $data['post_title_row'] : 1;
        $title_row_m = isset($data['post_title_row_mobile']) && $data['post_title_row_mobile'] ? $data['post_title_row_mobile'] : 1;

        return '
        <style>
            .post-item-'.$i.' ul.b2_gap > li{
                width:'.$r.'%
            }
            .post-item-'.$i.' .post-info a{
                -webkit-line-clamp: '.$title_row.';
            }
            @media screen and (max-width: 768px){
                .post-item-'.$i.' .item-in .post-info h2{
                    -webkit-line-clamp: '.$title_row_m.';
                }
            }
        </style>
        <div class="'.$data['post_type'].' post-list box b2-radius post-item-'.$i.'" id="post-item-'.$i.'" data-key="'.$i.'" data-i="'.$index.'">
            <div class="post-modules-top '.(!in_array('links',$post_meta) && !in_array('title',$post_meta) ? 'b2-hidden' : '').' '.(!in_array('title',$post_meta) ? 'cats-full' : '').'">
                '.$cats_list.'
            </div>
            <div class="hidden-line">
                <ul class="b2_gap">'.$html.'</ul>
            </div>
            <div v-show="showButton" @click="getList(\'\',\'more\',\''.$data['post_type'].'\')" class="load-more '.($data['post_load_more'] ? '' : 'load-more-hidden').'" data-showButton="'.($data['post_load_more'] ? true : false).'"><button class="empty post-load-button" :disabled="locked || finish"><span v-if="locked && !finish" v-cloak>'.__('加载中...','b2').'</span><span v-else-if="finish" v-cloak>'.__('没有更多了','b2').'</span><span v-else>'.__('加载更多','b2').'</span></button></div>
        </div>';
    }

    public static function post_6($data,$i,$return = false){

        $index = $i;

        $i = isset($data['key']) ? $data['key'] : 'ls'.round(100,999);

        $_post_data = self::get_post_data($data);
        $post_data = $_post_data['data'];

        //是否新窗口打开
        $open = self::open_type($data);

        //显示哪些post_meta
        $post_meta = isset($data['post_meta']) && $data['post_meta'] ? $data['post_meta'] : array();

        //分类列表
        $cats_list = self::get_cats($data,'category',$i,$_post_data['pages'],$index);

        $custom = isset($data['post_custom_key']) ? $data['post_custom_key'] : '';

        $data['post_load_more'] = isset($data['post_load_more']) && $data['post_load_more'] && $_post_data['pages'] > 1 ? true : false;

        $html_list = array();

        if(in_array('date',$post_meta)){
            $html_list['date'] = __('时间','b2');
        }

        $html_list['title'] = __('标题','b2');

        $arg = array();
        $arg = self::list_array($custom);

        if(!empty($arg)){
            foreach ($arg as $key => $value) {
                $html_list[$value['key']] = $value['name'];
            }unset($value);
        }

        if(in_array('cats',$post_meta)){
            $html_list['cats'] = __('分类','b2');
        }

        if(in_array('user',$post_meta)){
            $html_list['user'] = __('作者','b2');
        }

        $custom_html = '';
        foreach ($html_list as $key => $value) {
            $custom_html .= '<td class="post-6-'.$key.' post-6-item"><span>'.$value.'</span></td>';
        }unset($value);

        $html = '<div class="post-6-table"><table><thead>
        <tr class="grid-item post-list-item post-6-header">'.$custom_html.'</tr></thead><tbody class="b2_gap">';

        $html_in = '';
        foreach ($post_data as $k => $v) {

            $date = isset($html_list['date']) ? '<td class="post-6-date post-6-item"><span>'.$v['date'].'</span></td>' : '';

            $custom_row =  '';
            if(!empty($arg)){
                foreach ($arg as $key => $value) {
                    $_v = get_post_meta($v['id'],$value['key'],true);
                    $_v = $_v ? $_v : '-';
                    $custom_row .= '<td class="post-6-'.$value['key'].' post-6-item"><span>'.$_v.'</span></td>';
                }unset($value);
            }

            $cats = isset($html_list['cats']) ? '<td class="post-6-cats post-6-item">'.self::get_post_cats($open,$v,$post_meta,'post-6').'</td>' : '';

            $avatar = isset($html_list['user']) ? '<td class="post-6-user post-6-item"><a class="post-list-meta-avatar" href="'.$v['user_link'].'">'.b2_get_img(array('src'=>$v['user_avatar'],'class'=>array('avatar','b2-radius'),'alt'=>$v['user_name'])).'<span>'.$v['user_name'].'</span></a></td>' : '';
            
            //文章列表
            $html_in .= '<tr class="grid-item post-list-item" id="item-'.$v['id'].'">
                    '.$date.'
                    <td class="post-6-title post-6-item">
                        <h2><a '.$open.' href="'.$v['link'].'">'.$v['title'].'</a></h2>
                    </td>
                    '.$custom_row.'
                    '.$cats.'
                    '.$avatar.'
            </tr>';
        }unset($v);

        if($return){
            return array(
                'count'=>$_post_data['count'],
                'index'=>$i,
                'pages'=>$_post_data['pages'],
                'data'=>$html_in,
                'parent'=>$html
            );
        }

        $html = $html.$html_in;

        $html .='</tbody></table></div>';

        $title_row = isset($data['post_title_row']) && $data['post_title_row'] ? $data['post_title_row'] : 1;
        $title_row_m = isset($data['post_title_row_mobile']) && $data['post_title_row_mobile'] ? $data['post_title_row_mobile'] : 1;

        $r = ((floor((1/$data['post_row_count'])*10000)/10000)*100);
        return '
        <style>
            .post-item-'.$i.' ul.b2_gap > li{
                width:'.$r.'%
            }
            .post-item-'.$i.' td h2{
                -webkit-line-clamp: '.$title_row.';
            }
            @media screen and (max-width: 768px){
                .post-item-'.$i.' .item-in .post-info h2{
                    -webkit-line-clamp: '.$title_row_m.';
                }
            }
        </style>
        <div class="'.$data['post_type'].' post-list box b2-radius post-item-'.$i.'" id="post-item-'.$i.'" data-key="'.$i.'" data-i="'.$index.'" >
            <div class="post-modules-top '.(!in_array('links',$post_meta) && !in_array('title',$post_meta) ? 'b2-hidden' : '').' '.(!in_array('title',$post_meta) ? 'cats-full' : '').'">
                '.$cats_list.'
            </div>
            <div class="hidden-line">
                '.$html.'
            </div>
            <div v-show="showButton" @click="getList(\'\',\'more\',\''.$data['post_type'].'\')" class="load-more '.($data['post_load_more'] ? '' : 'load-more-hidden').'" data-showButton="'.($data['post_load_more'] ? true : false).'"><button class="empty post-load-button" :disabled="locked || finish"><span v-if="locked && !finish" v-cloak>'.__('加载中...','b2').'</span><span v-else-if="finish" v-cloak>'.__('没有更多了','b2').'</span><span v-else>'.__('加载更多','b2').'</span></button></div>
        </div>';
    }

    public static function list_array($str){
        if(!$str) return [];
        $str = trim($str, " \t\n\r\0");
        $str = explode(PHP_EOL, $str );
        $arg = array();

        foreach ($str as $k => $v) {
            if($v){
                $_v = explode('|', $v);

                $arg[] = array(
                    'name'=>isset($_v[0]) ? $_v[0] : '-',
                    'key'=>isset($_v[1]) ? trim($_v[1], " \t\n\r\0") : '-',
                );
            }
        }unset($v);

        return $arg;
    }

    /**
     * 将文章的设置项转换成json嵌入html
     *
     * @param array $data 设置项
     *
     * @return string json字符串
     * @author Li Ruchun <lemolee@163.com>
     * @version 1.0.0
     * @since 2018
     */
    public static function opt_to_json($data){

        $_data = array(
            'post_type'=>$data['post_type'],
            'post_order'=>$data['post_order'],
            'post_row_count'=>$data['post_row_count'],
            'post_count'=>$data['post_count'],
            'post_thumb_ratio'=>$data['post_thumb_ratio'],
            'post_thumb_ratio_mobile'=>isset($data['post_thumb_ratio_mobile']) ? $data['post_thumb_ratio_mobile'] : '1/0.7',
            'post_thumb_ratio_pc'=>isset($data['post_thumb_ratio_pc']) ? $data['post_thumb_ratio_pc'] : '1/0.7',
            'post_open_type'=>$data['post_open_type'],
            'post_meta'=>isset($data['post_meta']) && !empty($data['post_meta']) ? $data['post_meta'] : array(),
            'post_custom_key'=>isset($data['post_custom_key']) && !empty($data['post_custom_key']) ? $data['post_custom_key'] : array(),
            'width'=>$data['width'],
            'show_widget'=>isset($data['show_widget']) ? $data['show_widget'] : 0,
            'post_thumb_width'=>isset($data['post_thumb_width']) ? $data['post_thumb_width'] : 170,
            'post_thumb_width_mobile'=>isset($data['post_thumb_width_mobile']) ? $data['post_thumb_width_mobile'] : 100
        );

        $_data = json_encode($_data);

        return $_data;
    }

    public static function get_modules_title($data){

        $post_meta = isset($data['post_meta']) && is_array($data['post_meta']) ? $data['post_meta'] : array();

        $title = in_array('title',$post_meta);
        $html = '';

        // $desc = in_array('desc',$post_meta);

        //$desc = in_array('desc',$post_meta);
        $html .= '<div class="modules-title-box">';
        if($title && isset($data['title'])){
            $html .= '<h2 class="module-title">'.$data['title'].'</h2>';
        }

        // if($desc && isset($data['desc'])){
        //     $html .= '<p class="module-desc">'.$data['desc'].'</p>';
        // }

        // if($desc && isset($data['desc'])){
        //     $html .= '<p class="module-desc">'.$data['desc'].'</p>';
        // }
        $html .= '</div>';

        if(!$title){
            return '';
        }else{
            return $html;
        }
    }

    /**
     * 获取缩略图宽高
     *
     * @param array $data 设置项
     * @param string $thumb_count 每行显示数量
     *
     * @return void
     * @author Li Ruchun <lemolee@163.com>
     * @version 1.0.0
     * @since 2018
     */
    public static function get_thumb_size($data,$thumb_count){

        $thumb_count = (int)$thumb_count;

        $data['post_thumb_ratio'] = isset($data['post_thumb_ratio']) && $data['post_thumb_ratio'] ? $data['post_thumb_ratio'] : '1/0.618';
        $page_width = $data['width'];

        $m_w = '';

        //如果是post-3的样式,固定宽度
        if($data['post_type'] === 'post-3'){

            $data['post_thumb_ratio_mobile'] = isset($data['post_thumb_ratio_mobile']) && $data['post_thumb_ratio_mobile'] ? $data['post_thumb_ratio_mobile'] : '1/0.76';
            $data['post_thumb_ratio_pc'] = isset($data['post_thumb_ratio_pc']) && $data['post_thumb_ratio_pc'] ? $data['post_thumb_ratio_pc'] : '1/0.74';
 
            $w = isset($data['post_thumb_width']) ? (int)filter_var($data['post_thumb_width'], FILTER_SANITIZE_NUMBER_INT) : 170;
            $m_w = isset($data['post_thumb_width_mobile']) ? (int)filter_var($data['post_thumb_width_mobile'], FILTER_SANITIZE_NUMBER_INT) : 100;

            //获取缩略图比例
            $ratio = explode('/',$data['post_thumb_ratio_pc']);
            $w_ratio = $ratio[0];
            $h_ratio = $ratio[1];

            //获取缩略图比例
            $m_ratio = explode('/',$data['post_thumb_ratio_mobile']);
            $m_w_ratio = $m_ratio[0];
            $m_h_ratio = $m_ratio[1];

            $h = round($w/$w_ratio*$h_ratio);
            $m_h = round($m_w/$m_w_ratio*$m_h_ratio);

            return apply_filters('b2_post_thumb_size', array(
                'w'=>$w,
                'm_w'=>$m_w,
                'h'=>$h,
                'm_h'=>$m_h,
                'page_w'=>$page_width,
                'ratio'=>round($h_ratio/$w_ratio*100,6),
                'm_ratio'=>round($m_h_ratio/$m_w_ratio*100,6)
            ));

        //如果是 post-4 的样式,缩略图宽度平分
        }else{

            //获取缩略图比例
            $ratio = explode('/',$data['post_thumb_ratio']);
            $w_ratio = $ratio[0];
            $h_ratio = $ratio[1];

            if($data['post_type'] === 'post-4'){
                if($thumb_count != 1){
                    $w = ($page_width - ($thumb_count - 2)*B2_GAP)/($thumb_count-1);
                }else{
                    $w = $page_width;
                }
                
            //如果是其他样式,平分缩略图宽度
            }else{
                $w = ($page_width - ($thumb_count - 1)*B2_GAP) / $thumb_count;
            }

            //计算高度
            $h = round($w/$w_ratio*$h_ratio);
        }

        return apply_filters('b2_post_thumb_size', array(
            'w'=>$w,
            'm_w'=>$m_w,
            'h'=>$h,
            'page_w'=>$page_width,
            'ratio'=>round($h_ratio/$w_ratio*100,6)
        ));
    }

    /**
     * 页面打开方式
     *
     * @param array $data 设置项
     *
     * @return void
     * @author Li Ruchun <lemolee@163.com>
     * @version 1.0.0
     * @since 2018
     */
    public static function open_type($data){
        //是否新窗口打开
        $open = isset($data['post_open_type']) ? $data['post_open_type'] : '';

        if(!$open){
            return ' target="_blank"';
        }else{
            return '';
        }
    }

    /**
     * 获取当前文章的所有分类
     *
     * @param bool $open 打开方式
     * @param array $v 当前文章的数据
     * @param array $post_meta 设置项
     * @param string $post_type 当前文章列表的展现形式
     *
     * @return void
     * @author Li Ruchun <lemolee@163.com>
     * @version 1.0.0
     * @since 2018
     */
    public static function get_post_cats($open,$v,$post_meta,$post_type){
        //文章分类
        $cats = '';
        if(in_array('cats',$post_meta)){
            $cats = '<div class="post-list-cat  b2-radius">';
            foreach($v['cats'] as $cat){
                if($post_type === 'post_3'){
                    $cats .= '<a '.$open.' class="post-list-cat-item b2-radius" href="'.$cat['link'].'" style="color:'.$cat['color'].'">
                    '.$cat['name'].'</a>';
                }else{
                    $cats .= '<a '.$open.' class="post-list-cat-item b2-radius" href="'.$cat['link'].'" style="color:'.$cat['color'].'">'.$cat['name'].'</a>';
                    break;
                }
            }unset($cat);
            $cats .= '</div>';
        }

        return $cats;
    }

    /**
     * 分类导航列表
     *
     * @param array $cats 分类的 slug 数组
     * @param string $type taxonomy 类型
     *
     * @return void
     * @author Li Ruchun <lemolee@163.com>
     * @version 1.0.0
     * @since 2018
     */
    public static function get_cats($data,$type,$i,$_pages,$index){

        $title = self::get_modules_title($data);

        $cats = isset($data['post_cat']) ? (array)$data['post_cat'] : array();
        $post_meta = isset($data['post_meta']) && is_array($data['post_meta']) ? $data['post_meta'] : array();

        // $terms = get_terms( array(
        //     'taxonomy' =>  $type,
        //     'hide_empty' => false,
        //     'id'    => $cats,
        // ));
        $terms = array();

        foreach ($cats as $k => $v) {
            $t = get_term_by('id', $v, $type);
            if(is_wp_error( $t ) || !isset($t->name)) continue;
            $terms[] = array(
                'id'=>$v,
                'name'=>$t->name,
                'link'=>get_term_link( $t->slug, $type )
            );
        }unset($v);

        $html = $title;

        $html .= '<div class="post-list-cats '.($title ? 'post-list-cats-has-title' : '').'" style="'.(!in_array('links',$post_meta) ? 'display:none' : '').'">';

        $html .= '<div class="post-carts-list-row">';

        if(count($terms) > 1){
            $html .= '<a :class="\'cat-list post-load-button \' + (!id ? \'picked\' : \'\')" @click="getList(\'\',\'cat\',\''.$data['post_type'].'\')" href="javascript:void(0)"><span data-type="cat">'.__('全部','b2').'</span></a>';
        }
        
        if(count($terms) > 1){
            $t_i = 0;
            foreach ($terms as $k => $v) {
                $t_i ++;
                if($t_i > 4) break;
                $html .= '<a :class="\'cat-list post-load-button \' + (id == '.$v['id'].' ? \'picked\' : \'\')" @click="getList('.$v['id'].',\'cat\',\''.$data['post_type'].'\')"  href="javascript:void(0)"><span data-type="cat">'.$v['name'].'</span></a>';
            }unset($v);
        }
        
        if(!empty($terms)){
            if(count($terms) == 1){
                $html .= '<a class="cat-list post-load-button post-load-button-more" href="'.$terms[0]['link'].'" target="_blank"><span data-type="cat">'.__('更多','b2').b2_get_icon('b2-arrow-right-s-line').'</span></a>';
            }else{
                $more_url = isset($data['module_more_url']) && $data['module_more_url'] ? $data['module_more_url'] : '';
                if( !$more_url ) $more_url = B2_HOME_URI.'/cat-group/'.$i;
                $html .= '<a class="cat-list post-load-button post-load-button-more" href="'.$more_url.'" target="_blank"><span data-type="cat">'.__('更多','b2').b2_get_icon('b2-arrow-right-s-line').'</span></a>';
            }
            
        }

        $html .= '</div></div>';

        return $html;
    }

    public static function get_post_icon($post_id){
        $post_style = \B2\Modules\Templates\Single::get_single_post_settings($post_id,'single_post_style');
        $html = '';
        if($post_style == 'post-style-5'){
            $html = b2_get_icon('b2-play-circle-line');
        }
        
        return apply_filters('b2_post_list_icon', $html,$post_id);
    }

    /**
     * 获取文章信息
     *
     * @param array $data
     *
     * @return array
     * @author Li Ruchun <lemolee@163.com>
     * @version 1.0.0
     * @since 2018
     */
    public static function get_post_data($data){
        $paged = isset($data['post_paged']) ? (int)$data['post_paged'] : 1;
        $offset = ($paged -1)*(int)$data['post_count'];

        $post_type = isset($data['_post_type']) && $data['_post_type'] ? esc_attr($data['_post_type']) : 'post';

        $user_id = b2_get_current_user_id();

        if((isset($data['author__in']) && (int)$user_id === (int)$data['author__in'][0]  && (int)$data['author__in'][0] !== 0) || (user_can( $user_id, 'manage_options') && isset($data['author__in']) && (int)$data['author__in'][0])){
            $data['post_status'] = array('publish','pending','draft');
        }else{
            $data['post_status'] = array('publish');
        }

        $args = array(
            'post_type'=>$post_type,
            'posts_per_page' => (int)$data['post_count'] ? (int)$data['post_count'] : 10,
            'tax_query' => array(
                'relation' => 'AND',
            ),
            'meta_query'=>array(
                'relation' => 'AND',
            ),
            'date_query'=>array(
                'relation'=>'AND',
            ),
            'offset'=>$offset,
            'post_status'=>$data['post_status']
            // 'include_children' => true,
        );

        if(isset($data['post_order']) && !empty($data['post_order'])){
            switch($data['post_order']){
                case 'random':
                    $args['orderby'] = 'rand';
                    break;
                case 'sticky':
                    $args['post__in'] = get_option( 'sticky_posts' );
                    $args['ignore_sticky_posts'] = 1;
                    break;
                case 'modified':
                    $args['orderby'] = 'modified';
                    break;
                case 'views':
                    $args['meta_key'] = 'views';
                    $args['orderby'] = 'meta_value_num';
                    break;
                case 'like':
                    $args['meta_key'] = 'b2_vote_up_count';
                    $args['orderby'] = 'meta_value';
                    break;
                case 'comments':
                    $args['orderby'] = 'comment_count';
                    break;
            }
        }

        //如果存在用户
        if(isset($data['author__in']) && !empty($data['author__in'])){
            $args['author__in'] = $data['author__in'];
        }

        //如果是存在分类
        if(isset($data['post_cat']) && !empty($data['post_cat'])){
            // if(count($data['post_cat']) > 1){
            //     $data['post_cat'] = $data['post_cat'][0];
            // }
            array_push($args['tax_query'],array(
                'taxonomy' => 'category',
                'field'    => 'id',
                'terms'    => (array)$data['post_cat'],
                'include_children' => true,
                'operator' => 'IN'
            ));
        }

        //如果存在专辑
        if(isset($data['collection_slug']) && !empty($data['collection_slug'])){
            $order = b2_get_option('template_collection','collection_post_order');
  
            $args['order'] = $order ? $order : 'asc';
            array_push($args['tax_query'],array(
                'taxonomy' => 'collection',
                'field'    => 'id',
                'terms'    => (array)$data['collection_slug'],
                'include_children' => true,
                'operator' => 'IN'
            ));
        }

        //如果存在标签
        if(isset($data['post_tag']) && !empty($data['post_tag'])){
            array_push($args['tax_query'],array(
                'taxonomy' => 'post_tag',
                'field'    => 'slug',
                'terms'    => (array)$data['post_tag'],
                'include_children' => true,
                'operator' => 'IN'
            ));
        }

        //如果存在标签
        if(isset($data['tags']) && !empty($data['tags'])){
            array_push($args['tax_query'],array(
                'taxonomy' => 'post_tag',
                'field'    => 'slug',
                'terms'    => (array)$data['tags'],
                'operator' => 'AND'
            ));
        }

        //如果自定义字段筛选
        if(isset($data['metas']) && !empty($data['metas'])){
            foreach($data['metas'] as $k=>$v){
                array_push($args['meta_query'],array(
                    'key'     => $k,
                    'value'   => $v,
                    'compare' => '=',
                ));
            }unset($v);
        }

        //如果是月度筛选
        if(isset($data['month']) && !empty($data['month'])){
            array_push($args['date_query'],array(
                'month' => esc_attr($data['month'])
            ));
        }

        //如果是年度筛选
        if(isset($data['month']) && !empty($data['month'])){
            array_push($args['date_query'],array(
                'year' => esc_attr($data['year'])
            ));
        }

        if(isset($data['search']) && !empty($data['search'])){
            $args['search_tax_query'] = true;
            $args['s'] = esc_attr($data['search']);
        }

        if(isset($data['post_ignore_sticky_posts'])){
            $args['ignore_sticky_posts'] = $data['post_ignore_sticky_posts'];
        }

        // $args['no_found_rows'] = isset($data['no_rows']) ? $data['no_rows'] : false;
        // $args['update_post_meta_cache'] = false;
        // $args['update_post_term_cache'] = false;
        // $args['fields'] = 'ids';

        $args = apply_filters( 'b2_post_loop_args', $args, $data );
        
        // $the_query = new \WP_Query( $args );
        // $my_posts = $the_query->get_posts();

        // $post_data = array();
        // $_pages = 1;
        // $_count = 0;

        // if($my_posts){
        //     $_pages = $the_query->max_num_pages;
        //     $_count = $the_query->found_posts;
        //     foreach ($my_posts as $p) {

        //         $post_data[] = self::get_post_metas($p,$data);
        //     }
        // }

        // wp_reset_postdata();

        $the_query = new \WP_Query( $args );

        $post_data = array();
        $_pages = 1;
        $_count = 0;
        if ( $the_query->have_posts() ) {

            $_pages = $the_query->max_num_pages;
            $_count = $the_query->found_posts;

            while ( $the_query->have_posts() ) {

                $the_query->the_post();

                $post_data[] = self::get_post_metas($the_query->post->ID,$data);
                //apply_filters('b2_get_post_meta', $the_query->post->ID,$data);
            }
            wp_reset_postdata();
        }

        
        // if ( $the_query->have_posts() ) {

        //     $_pages = $the_query->max_num_pages;
        //     $_count = $the_query->found_posts;

        //     while ( $the_query->have_posts() ) {

        //         $the_query->the_post();

        //         $post_data[] = self::get_post_metas($the_query->post->ID,$data);
        //         //apply_filters('b2_get_post_meta', $the_query->post->ID,$data);
        //     }
        //     
        // }
        
        return array(
            'count'=>$_count,
            'pages'=>$_pages,
            'data'=>$post_data
        );
    }

    public static function get_post_metas($post_id,$data = ''){

        $thumb_id = get_post_thumbnail_id($post_id);
        $thumb_url = wp_get_attachment_image_src($thumb_id,'full');

        if(!isset($thumb_url[0]) || !$thumb_url[0]){
            $thumb_url = array(
                \B2\Modules\Common\Post::get_post_thumb($post_id),
                400,
                300
            );
        }

       // var_dump($thumb_url);

        // if($data['post_type'] === 'post-2'){
        //     if($thumb_url[2] > 200) $thumb_url[2] = 200;
        // }

        $post_meta = Post::post_meta($post_id,$data);
        $post_meta['id'] = $post_id;
        $post_meta['title'] = get_the_title($post_id);
        $post_meta['link'] = get_permalink($post_id);
        $post_meta['thumb'] = $thumb_url[0];
        $post_meta['thumb_ratio'] = isset($thumb_url[2]) && isset($thumb_url[1]) && $thumb_url[1] > 0 ? round($thumb_url[2]/$thumb_url[1],6) : 1;
        $post_meta['des'] = b2_get_excerpt($post_id);
        $post_meta['status'] = get_post_status($post_id);
        // unset($data);
        $post_meta['pay_type'] = Post::get_post_pay_data($post_id);
        return $post_meta;
    }

    public static function get_post_pay_data($data,$post_meta){
        $html = '';
        if(!empty($data)){
            foreach ($data as $k => $v) {
                if($v['type'] === 'video' && in_array('video',$post_meta)){
                    $html .= '<div><span class="post-pay-type-icon">'.b2_get_icon('b2-caozuoshili').'<b>'.__('视频','b2').'</b></span><span>'.sprintf(__('共%s节','b2'),$v['count']).'</span></div>';
                }elseif($v['type'] === 'download' && in_array('download',$post_meta)){
                    $html .= '<div><span class="post-pay-type-icon">'.b2_get_icon('b2-download1').'<b>'.__('下载','b2').'</b></span><span>'.sprintf(__('%s个资源','b2'),$v['count']).'</span></div>';
                }elseif($v['type'] === 'hide' && in_array('hide',$post_meta)){

                    $role = $v['pay_type'];
                    $role_text = '';
                    switch ($role) {
                        case 'money':
                            $role_text = __('付费阅读','b2');
                            break;
                        case 'credit':
                            $role_text = __('支付积分','b2');
                            break;
                        case 'roles':
                            $role_text = __('限制等级','b2');
                            break;
                        case 'login':
                            $role_text = __('登陆可见','b2');
                            break;
                        case 'comment':
                            $role_text = __('评论可见','b2');
                            break;
                    }

                    $html .= '<div><span class="post-pay-type-icon">'.b2_get_icon('b2-suo1').'<b>'.__('隐藏','b2').'</b></span><span>'.$role_text.'</span></div>';
                }
                
            }unset($v);
        }

        if($html){
            $html = '<div class="post-pay-type">'.$html.'</div>';
        }

        return $html;
    }

    

}

Youez - 2016 - github.com/yon3zu
LinuXploit