Guenni007 icon

class-avia-newsbox

Guenni007 | PRO | 04/03/23 03:43:42 PM UTC | 0 ⭐ | 958 👁️ | Never ⏰ | []
PHP |

10.54 KB

|

None

|

0 👍

/

0 👎

<?php
namespace aviaFramework\widgets;
 
use WP_Query;
 
/**
 * AVIA NEWSBOX
 *
 * Widget that creates a list of latest news entries
 *
 * @package AviaFramework
 * @since ???
 * @since 4.9           Code was moved from class-framework-widgets.php
 */
if( ! defined( 'AVIA_FW' ) ) {  exit( 'No direct script access allowed' );  }
 
if( ! class_exists( __NAMESPACE__ . '\avia_newsbox' ) )
{
    class avia_newsbox extends \aviaFramework\widgets\base\Avia_Widget
    {
        /**
         *
         * @var string
         */
        protected $avia_term;
 
        /**
         *
         * @var string
         */
        protected $avia_post_type;
 
        /**
         *
         * @var string
         */
        protected $avia_new_query;
 
        /**
         * @since 4.9                       added parameters $id_base, ... $control_options
         * @param string $id_base
         * @param string $name
         * @param array $widget_options
         * @param array $control_options
         */
        public function __construct( $id_base = '', $name = '', $widget_options = array(), $control_options = array() )
        {
            if( empty( $id_base ) )
            {
                $id_base = 'newsbox';
            }
 
            if( empty( $name ) )
            {
                $name = THEMENAME . ' ' . __( 'Latest News', 'avia_framework' );
            }
 
            if( empty( $widget_options ) )
            {
                $widget_options = array(
                                'classname'             => 'newsbox',
                                'description'           => __( 'A Sidebar widget to display latest post entries in your sidebar', 'avia_framework' ),
                                'show_instance_in_rest' => true,
                                'customize_selective_refresh' => false
                            );
            }
 
            parent::__construct( $id_base, $name, $widget_options, $control_options );
 
            $this->defaults = array(
                                'title'     => '',
                                'count'     => '',
                                'excerpt'   => '',
                                'cat'       => ''
                            );
 
            $this->avia_term = '';
            $this->avia_post_type = '';
            $this->avia_new_query = '';
        }
 
        /**
         * Output the widget in frontend
         *
         * @since 4.9
         * @param array $args
         * @param array $instance
         */
        public function widget( $args, $instance )
        {
            global $avia_config;
 
            $instance = $this->parse_args_instance( $instance );
 
            extract( $args, EXTR_SKIP );
 
            echo $before_widget;
 
            $title = empty( $instance['title'] ) ? '' : apply_filters( 'widget_title', $instance['title'] );
            $count = empty( $instance['count'] ) ? '' : $instance['count'];
            $cat = empty( $instance['cat'] ) ? '' : $instance['cat'];
            $excerpt = empty( $instance['excerpt'] ) ? '' : $instance['excerpt'];
            $image_size = isset( $avia_config['widget_image_size'] ) ? $avia_config['widget_image_size'] : 'widget';
 
            /**
             * @since 4.5.4
             * @param string $image_size
             * @param array $args
             * @param array $instance
             * @return string
             */
            $image_size = apply_filters( 'avf_newsbox_image_size', $image_size, $args, $instance );
 
            if( ! empty( $title ) )
            {
                echo $before_title . $title . $after_title;
            }
 
            if( empty( $this->avia_term ) )
            {
                $additional_loop = new WP_Query( "cat={$cat}&posts_per_page={$count}" );
            }
            else
            {
                $catarray = explode( ',', $cat );
 
                if( empty( $catarray[0] ) )
                {
                    $new_query = array(
                                    'posts_per_page'    => $count,
                                    'post_type'         => $this->avia_post_type
                                );
                }
                else
                {
                    if( $this->avia_new_query )
                    {
                        $new_query = $this->avia_new_query;
                    }
                    else
                    {
                        $new_query = array(
                                        'posts_per_page'    => $count,
                                        'tax_query'         => array(
                                                                array(
                                                                    'taxonomy'  => $this->avia_term,
                                                                    'field'     => 'id',
                                                                    'terms'     => explode( ',', $cat ),
                                                                    'operator'  => 'IN'
                                                                )
                                                            )
                                                        );
                    }
                }
 
                $additional_loop = new WP_Query( $new_query );
            }
 
            if( $additional_loop->have_posts() )
            {
                echo '<ul class="news-wrap image_size_' . $image_size . '">';
 
                while( $additional_loop->have_posts() )
                {
                    $additional_loop->the_post();
 
                    $format = '';
 
                    if( empty( $this->avia_post_type ) )
                    {
                        $format = $this->avia_post_type;
                    }
 
                    if( empty( $format ) )
                    {
                        $format = get_post_format();
                    }
 
                    if( empty( $format ) )
                    {
                        $format = 'standard';
                    }
 
                    $the_id = get_the_ID();
                    $link = get_post_meta( $the_id , '_portfolio_custom_link', true ) != '' ? get_post_meta( $the_id ,'_portfolio_custom_link_url', true ) : get_permalink();
 
                    echo '<li class="news-content post-format-'.$format.'">';
 
                    //check for preview images:
                    $image = '';
 
                    if( ! current_theme_supports( 'force-post-thumbnails-in-widget' ) )
                    {
                        $slides = avia_post_meta( get_the_ID(), 'slideshow', true );
 
                        if( $slides != '' && ! empty( $slides[0]['slideshow_image'] ) )
                        {
                            $image = avia_image_by_id( $slides[0]['slideshow_image'], $image_size, 'image' );
                        }
                    }
 
                    if( current_theme_supports( 'post-thumbnails' ) && ! $image )
                    {
                        $image = get_the_post_thumbnail( $the_id, $image_size );
                    }
 
                    $time_format = apply_filters( 'avia_widget_time', get_option( 'date_format' ) . ' - ' . get_option( 'time_format' ), 'avia_newsbox' );
 
                    echo '<a class="news-link" title="' . get_the_title() . '" href="' . $link . '">';
 
                    $nothumb = ( ! $image ) ? 'no-news-thumb' : '';
 
                    echo "<span class='news-thumb {$nothumb}'>";
                    echo    $image;
                    echo '</span>';
 
                    if( empty( $avia_config['widget_image_size'] ) || 'display title and excerpt' != $excerpt )
                    {
                        echo '<strong class="news-headline">' . get_the_title();
 
                        echo '<br />'. __( 'in', 'avia_framework') . ': ';
                        $cats = get_the_category();
                        $catsArray = [];
                        foreach($cats as $cat)
                        $catsArray[] = '<span class = "widget_latest_category">' .$cat->cat_name. '</span>';
                        echo implode(", ", $catsArray);
 
                        if( $time_format )
                        {
                            echo '<span class="news-time">' . get_the_time( $time_format ) . '</span>';
                        }
 
                        echo '</strong>';
                    }
 
                    echo '</a>';
 
                    if( 'display title and excerpt' == $excerpt )
                    {
                        echo '<div class="news-excerpt">';
 
                        if( ! empty( $avia_config['widget_image_size'] ) )
                        {
                            echo '<a class="news-link-inner" title="' . get_the_title() . '" href="' . $link . '">';
                            echo    '<strong class="news-headline">' . get_the_title() . '</strong>';
                            echo '</a>';
 
                            echo '<br />'. __( 'in', 'avia_framework') . ': ';
                            $cats = get_the_category();
                            $catsArray = [];
                            foreach($cats as $cat)
                            $catsArray[] = '<span class = "widget_latest_category">' .$cat->cat_name. '</span>';
                            echo implode(", ", $catsArray);
 
                            if( $time_format )
                            {
                                echo '<span class="news-time">' . get_the_time( $time_format ) . '</span>';
                            }
                        }
 
                        the_excerpt();
 
                        echo '</div>';
                    }
 
                    echo '</li>';
                }
 
                echo '</ul>';
                wp_reset_postdata();
            }
 
            echo $after_widget;
        }
 
        /**
         * Update widget options
         *
         * @param array $new_instance
         * @param array $old_instance
         * @return array
         */
        public function update( $new_instance, $old_instance )
        {
            $instance = $this->parse_args_instance( $old_instance );
 
            $instance['title'] = strip_tags( $new_instance['title'] );
            $instance['count'] = strip_tags( $new_instance['count'] );
            $instance['excerpt'] = strip_tags( $new_instance['excerpt'] );
 
            if( ! empty( $new_instance['cat'] ) )
            {
                $instance['cat'] = is_array( $new_instance['cat'] ) ? implode( ',', $new_instance['cat'] ) : strip_tags( $new_instance['cat'] );
            }
 
            return $instance;
        }
 
        /**
         * Output the form in backend
         *
         * @param array $instance
         */
        public function form( $instance )
        {
            $instance = $this->parse_args_instance( $instance );
 
            $title = strip_tags( $instance['title'] );
            $count = strip_tags( $instance['count'] );
            $excerpt = strip_tags( $instance['excerpt'] );
 
            $elementCat = array(
                        'name'      => __( 'Which categories should be used for the portfolio?', 'avia_framework' ),
                        'desc'      => __( 'You can select multiple categories here', 'avia_framework' ),
                        'id'        => $this->get_field_name( 'cat' ) . '[]',
                        'type'      => 'select',
                        'std'       => strip_tags( $instance['cat'] ),
                        'class'     => '',
                        'multiple'  => 6,
                        'subtype'   => 'cat'
                    );
 
            //check if a different taxonomy than the default is set
            if( ! empty( $this->avia_term ) )
            {
                $elementCat['taxonomy'] = $this->avia_term;
            }
 
            $html = new \avia_htmlhelper();
    ?>
            <p>
                <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'avia_framework' ); ?>
                <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" /></label>
            </p>
 
            <p>
                <label for="<?php echo $this->get_field_id( 'count' ); ?>"><?php _e( 'How many entries do you want to display: ', 'avia_framework' ); ?></label>
                <select class="widefat" id="<?php echo $this->get_field_id( 'count ' ); ?>" name="<?php echo $this->get_field_name( 'count' ); ?>">
                    <?php
                    $list = '';
                    for ($i = 1; $i <= 20; $i++ )
                    {
                        $selected = '';
                        if( $count == $i )
                        {
                            $selected = 'selected="selected"';
                        }
 
                        $list .= "<option {$selected} value='{$i}'>{$i}</option>";
                    }
                    $list .= '</select>';
                    echo $list;
                    ?>
            </p>
 
            <p><label for="<?php echo $this->get_field_id( 'cat' ); ?>"><?php _e( 'Choose the categories you want to display (multiple selection possible):', 'avia_framework' ); ?>
            <?php echo $html->select( $elementCat ); ?>
            </label></p>
 
            <p>
                <label for="<?php echo $this->get_field_id( 'excerpt' ); ?>"><?php _e( 'Display title only or title &amp; excerpt', 'avia_framework' ); ?></label>
                <select class="widefat" id="<?php echo $this->get_field_id( 'excerpt' ); ?>" name="<?php echo $this->get_field_name( 'excerpt' ); ?>">
                    <?php
                    $list = '';
                    $answers = array(
                                'show title only'           =>  __( 'show title only', 'avia_framework' ),
                                'display title and excerpt' =>  __( 'display title and excerpt', 'avia_framework' )
                                );
 
                    foreach ( $answers as $key => $answer )
                    {
                        $selected = '';
                        if( $key == $excerpt )
                        {
                            $selected = 'selected="selected"';
                        }
 
                        $list .= "<option {$selected} value='{$key}'>{$answer}</option>";
                    }
                    $list .= '</select>';
                    echo $list;
                    ?>
            </p>
<?php
        }
    }
}
 
 

Comments