File "articles-singular.php"
Full Path: /var/www/bvnghean.vn/save_bvnghean.vn/wp-content/plugins/sneeit-framework/includes/articles/articles-singular.php
File size: 32.48 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* This class is for sneeit article query to display items
*/
class Sneeit_Singular {
var $ID = 0;
var $title = '';
var $title_attr = '';
var $href = '';
var $args = array(); /* reserve */
var $au_ID = 0;
var $au_name = '';
var $au_href = '';
var $comments_number = 0;
var $comments_href = '';
var $article_image = 'data:image/gif;base64,';
var $article_image_width = 1000;
var $artcile_image_height = 100;
var $feature_media = '';
/**
* Every key which has _meta_ will default for get_post_meta
* Every key which has _mod_ will default for get_theme_mod
*/
function __construct($args = array()) {
$this->ID = get_the_ID();
$this->args = wp_parse_args($args, $this->args);
$this->title = balanceTags(get_the_title(), true);
$this->title_attr = esc_attr($this->title);
$this->href = esc_url(get_the_permalink());
$this->au_ID = get_the_author_meta('ID');
$this->au_name = get_the_author_meta( 'display_name' );
$this->au_href = esc_url(get_author_posts_url($this->au_ID));
$this->comments_number = get_comments_number();
$this->comments_href = $this->href . '#comments';
// find feature image
}
/**
* display start tag of article, <article>
*/
function start_tag($args = array()) {
if (is_string($args)) {
$args = array(
'class' => $args
);
}
$args = wp_parse_args($args, array(
/* we will post meta of this key to get review data of post
* to check and then we can add micro data and open graph
* default: post-review
* the stored value must be generated by sneeit_review_system action
*/
'post_review_meta_key' => SNEEIT_KEY_POST_REVIEW,
'class' => ''
));
$review = get_post_meta($this->ID, $args['post_review_meta_key'], true);
$is_review = (
is_array($review) &&
!empty($review['type']) &&
is_array($review[$review['type']] )
);
?><article <?php post_class($args['class']) ?> itemscope="itemscope" itemtype="http://schema.org/<?php echo ($is_review? 'Review' : 'NewsArticle'); ?>"><?php
}
/**
* We add disable_breadcrumb field to allow
* developers control from their theme options
* you can control from disable_breadcrumb_mod_key args
*/
function crumbs($args = array()) {
if (is_string($args)) {
$args = array(
'home_text' => $args
);
}
$args = wp_parse_args($args, array(
'before' => '<div class="crumbs">',
'after' => '</div>',
'home_text' => esc_html('Home', 'sneeit'),
/* We will get theme mod of this key
* to check if crumbs was disabled or not
* default: article-breadcrumb
*/
'article_breadcrumb_mod_key' => SNEEIT_KEY_ARTICLE_BREADCRUMB,
));
if (get_theme_mod($args['article_breadcrumb_mod_key'], true)) {
sneeit_utilities_breadcrumbs($args);
}
}
/**
* get article image for open graph / meta / micro data
*/
function article_image() {
if (!empty($this->article_image) &&
!empty($this->article_image_width) &&
!empty($this->article_image_height)) {
return;
}
// DEFINE
$image_html = '';
$src = '';
// IF HAVE THUMBNAIL
if (has_post_thumbnail( $this->ID ) ) {
$img_id = get_post_thumbnail_id();
$img = wp_get_attachment_image_src($img_id, 'full');
if (is_array($img) &&
count($img) > 3 &&
is_string($img[0]) &&
is_numeric($img[1]) &&
is_numeric($img[2])) {
$this->article_image = $img[0];
$this->article_image_width = $img[1];
$this->article_image_height = $img[2];
return;
}
}
// CHECK IF HAVE FEATURE MEDIA FIELD
// scan in
if (!empty($this->feature_media)) {
$src = sneeit_get_youtube_image($this->feature_media);
if ($src) {
$this->article_image = $src;
$this->article_image_width = 320;
$this->article_image_height = 180;
return;
}
$src = sneeit_get_vimeo_image($this->feature_media);
if ($src) {
$this->article_image = $src;
$this->article_image_width = 640;
$this->article_image_height = 360;
return;
}
}
// so, now, we must scan the first image
$src = sneeit_article_get_image_src(get_the_content());
// found an attachment id
if (is_numeric($src)) {
$img = wp_get_attachment_image_src($src, 'full');
if (is_array($img) &&
count($img) > 3 &&
is_string($img[0]) &&
is_numeric($img[1]) &&
is_numeric($img[2])) {
$this->article_image = $img[0];
$this->article_image_width = $img[1];
$this->article_image_height = $img[2];
return;
}
}
// found image, just output the image link
if ( $src ) {
$this->article_image = esc_url( $src );
if (strpos($src, 'youtube') != 'false') {
$this->article_image_width = 320;
$this->article_image_height = 180;
} else if (strpos($src, 'vimeo') != 'false') {
$this->article_image_width = 640;
$this->article_image_height = 360;
}
}
}
/**
* we will prority showing extra feature media first
* then post thumbnail if have
*
* you will place this function at all places you want to show feature box
* for each place, you will need to input the position name,
* ex: above-title or under-title or whatever
* but only the place with name matched the article_feature_mod_key value will show
*/
function feature($args = array()) {
if (is_string($args)) {
$args = array(
'position' => $args
);
}
$args = wp_parse_args($args, array(
/* you may not want to echo, but only get the part you want
* caption: get only the caption content
* src: get only feature image src (include thumbnail from youtube / vimeo)
* player: get only embeded iframe player if youtube or vimeo
*/
'return_data' => 'echo',
'before' => '<div class="entry-feature-box">',
'after' => '</div>',
'before_media' => '<div class="entry-feature-box-media">',
'after_media' => '</div>',
'before_caption' => '<div class="entry-feature-box-caption">',
'after_caption' => '</div>',
/* before and after. other value means hide */
'caption_position' => 'after',
/* we will use those keys to scan extra feature content
* so you need to save your extra feature media in there
* ex: video links / embeded code
*/
/* - the theme mod to indicate position of feature box.
* - default: article-feature */
'article_feature_mod_key' => SNEEIT_KEY_ARTICLE_FEATURE,
/* - the post meta contains the extra feature media content
* - default: post-feature-media */
'post_feature_media_meta_key' => SNEEIT_KEY_POST_FEATURE_MEDIA,
/* - the post meta contains feature box caption content
* - default: post-feature-caption
*/
'post_feature_caption_meta_key' => SNEEIT_KEY_POST_FEATURE_CAPTION,
/* the value will be used to compare with
* value of article_feature_mod_key theme mod to
* check if we need to show or not for this position
*
* if position is empty, always show
*/
'position' => 'above-title',
));
if ('echo' == $args['return_data'] &&
!empty($args['position']) &&
get_theme_mod($args['article_feature_mod_key'], 'above-title') != $args['position']) {
return;
}
$feature_media = get_post_meta($this->ID, $args['post_feature_media_meta_key'], true);
$feature_caption = get_post_meta( $this->ID, $args['post_feature_caption_meta_key'], true );
if ('caption' == $args['return_data']) {
return $feature_caption;
} else if ('src' == $args['return_data']) {
$src = '';
if (has_post_thumbnail( $this->ID )) {
$img_id = get_post_thumbnail_id();
$img = wp_get_attachment_image_src($img_id, 'full');
if (is_array($img) &&
count($img) > 3 &&
is_string($img[0]) &&
is_numeric($img[1]) &&
is_numeric($img[2])) {
$this->article_image = $img[0];
$this->article_image_width = $img[1];
$this->article_image_height = $img[2];
$src = $img[0];
}
}
if (!$src && $feature_media) {
$src = sneeit_get_youtube_image($feature_media);
if (!$src) {
$src = sneeit_get_vimeo_image($feature_media);
}
}
return $src;
} else if ('player' == $args['return_data']) {
$player = '';
if ($feature_media) {
if ( strpos( $feature_media, 'vimeo' ) !== false ) {
$player = sneeit_get_get_vimeo_player( $feature_media );
} else if ( strpos( $feature_media, 'youtube' ) !== false ||
strpos( $feature_media, 'youtu.be' ) !== false ) {
$player = sneeit_get_youtube_player( $feature_media );
}
}
return $player;
}
if ($feature_media) {
// save to display
$this->feature_media = $feature_media;
// if feature video url is actually video embedded HTML code
if ( strpos( $feature_media, '<' ) !== false && strpos( $feature_media, '>' ) !== false ) {
// do some thing here to process embedded code if need
}
// only vimeo url
else if ( strpos( $feature_media, 'vimeo' ) !== false ) {
$feature_media = sneeit_get_get_vimeo_player( $feature_media );
}
// only youtube url
else if ( strpos( $feature_media, 'youtube' ) !== false || strpos( $feature_media, 'youtu.be' ) !== false ) {
$feature_media = sneeit_get_youtube_player( $feature_media );
}
// just invalid url
else {
$feature_media = '';
}
}
if ($feature_media || has_post_thumbnail()) :
echo $args['before'];
echo $args['before_media'];
if ($args['caption_position'] == 'before' && $feature_caption) {
echo $args['before_caption'];
echo $feature_caption;
echo $args['after_caption'];
}
if ( $feature_media ) {
echo $feature_media;
}
else {
the_post_thumbnail( 'full', array(
'alt' => $this->title_attr,
'title' => $this->title_attr,
) );
}
echo $args['after_media'];
if ($args['caption_position'] == 'after' && $feature_caption) {
echo $args['before_caption'];
echo $feature_caption;
echo $args['after_caption'];
}
echo $args['after'];
endif;
}
/**
* display title of the article
*/
function title() {
echo '<h1 class="entry-title post-title" itemprop="name headline">'.$this->title.'</h1>';
}
/**
* display sub title if have
* the key is the post meta key which contains sub-title text
*/
function sub_title($key = 'sub-title') {
$sub_title = get_post_meta($this->ID, $key, true);
if ($sub_title) {
$sub_title = balanceTags($sub_title, true);
echo '<h2 class="entry-sub-title">'.$sub_title.'</h2>';
}
}
/**
* display excerpt
*/
public function excerpt($args = array()) {
$args = wp_parse_args($args, array(
/* we will get theme mod of this key to check if
* user allow to display excerpt or not
* default: article-excerpt
*/
'article_excerpt_mod_key' => SNEEIT_KEY_ARTICLE_EXCERPT
));
/* check from excerpt first */
if (has_excerpt() && get_theme_mod($args['article_excerpt_mod_key'], true)) {
echo '<p class="entry-excerpt">'.get_the_excerpt().'</p>';
}
}
/**
* show some basic sharing buttons (without style)
*
* you will call this function at all places you want to
* show share buttons, but only place which has value from
* article_sharing_position_mod_key equal with position args will
* be shown
* */
public function sharing_buttons($args = array()) {
if (is_string($args)) {
if (strpos($args, ',')) {
$networks = $args;
$args = array();
$args['networks'] = $networks;
} else {
$position = $args;
$args = array();
$args['position'] = $position;
}
}
$args = wp_parse_args($args, array(
'before' => '<div class="entry-sharing-buttons">',
'after' => '</div>',
'link_class' => '',
/* network can be array:
* key (network name) => value (text to display for button)
*
* if network is string like: facebook, twitter
* it will be splitted by "," and key will be the value,
* when text will be fontawesome icon
*/
/* the theme mod key which is storing
* position setting for sharing buttons
* default: article-sharing-position
*/
'article_sharing_position_mod_key' => SNEEIT_KEY_ARTICLE_SHARING_POSITION,
/* the theme mod key which is storing
* which network buttons will be shown
* default: article-sharing-buttons
* value will be an array of network names
* or a string of names separated by comma (,)
* ex: facebook,google
*
* You can input $args['networks'] to display
* networks as you want regardless this value
*/
'article_sharing_buttons_mod_key' => SNEEIT_KEY_ARTICLE_SHARING_BUTTONS,
/* We will use this to get custom code
* default: article-sharing-custom-code
*/
'article_sharing_custom_code_mod_key' => SNEEIT_KEY_ARTICLE_SHARING_CUSTOM_CODE,
/* the value which will be used to compare with
* article_sharing_position_mod_key value to decide
* if we need to show sharing buttons for this position
* or not
*/
'position' => 'bottom',
/**
* @since 5.0
* show the name of network */
'show_name' => false,
));
// check if the theme disable the sharing or not
$position = get_theme_mod($args['article_sharing_position_mod_key'], '');
if (!$position ||
( $position != $args['position'] &&
strpos($position, '-'.$args['position']) === false )
) {
return;
}
// check if we have custom sharing code
// so we will priority show it
$html = get_theme_mod($args['article_sharing_custom_code_mod_key'], '');
if ($html) {
echo $html = $args['before'].$html.$args['after'];
return;
}
// now, collects networks
if (empty($args['networks'])) {
$args['networks'] = get_theme_mod($args['article_sharing_buttons_mod_key'], '');
if (empty($args['networks'])) {
return;
}
}
if (is_string($args['networks'])) {
$args['networks'] = explode(',', $args['networks']);
}
$html = '';
$title_urlencode = urlencode($this->title_attr);
foreach ($args['networks'] as $key => $value) {
$network = $value;
// validate data
if (is_array($value) || !is_numeric($key)) {
$network = $key;
}
$link = '';
$link_text = '';
switch (trim(strtolower($network))) {
case 'facebook':
case 'fb':
case 'face':
$network = 'facebook';
$link = esc_url('https://www.facebook.com/sharer.php?u='.$this->href);
$link_text = '<i class="fa fa-facebook"></i>';
break;
case 'mail':
case 'email':
case 'e-mail':
$network = 'e-mail';
$link = esc_url('mailto:?subject='.$title_urlencode.'&body='.$this->href);
$link_text = '<i class="fa fa-envelope-o"></i>';
break;
case 'twitter' :
case 'tw' :
case 'tweet' :
$network = 'twitter';
$link = esc_url('https://twitter.com/intent/tweet?text='.$title_urlencode.'&url='.$this->href);
$link_text = '<i class="fa fa-twitter"></i>';
break;
case 'pin' :
case 'pinterest' :
$network = 'pinterest';
$link = esc_url('https://pinterest.com/pin/create/bookmarklet/?url='.$this->href.'&title='.$title_urlencode);
$link_text = '<i class="fa fa-pinterest-p"></i>';
break;
case 'whatsapp' :
$network = 'whatsapp';
$link = esc_url('https://wa.me/?text='. $title_urlencode . ' ' . $this->href);
$link_text = '<i class="fa fa-whatsapp"></i>';
break;
case 'linkedin' :
case 'linked' :
case 'in' :
$network = 'linkedin';
$link = esc_url('https://www.linkedin.com/shareArticle?mini=true&url='.$this->href.'&title='.$title_urlencode);
$link_text = '<i class="fa fa-linkedin"></i>';
break;
case 'skype':
$network = 'skype';
$link = esc_url('https://web.skype.com/share?url='.$this->href);
$link_text = '<i class="fa fa-skype"></i>';
break;
case 'google-plus' :
case 'g+' :
case 'g-plus' :
case 'gplus' :
case 'google+' :
case 'googleplus' :
$network = 'google-plus';
$link = esc_url('http://plus.google.com/share?url='.$this->href);
$link_text = '<i class="fa fa-google-plus"></i>';
break;
default:
break;
}
/**
* @since 5.0
* Show name of network if user want
*/
if (!empty($args['show_name'])) {
$link_text .= '<span>' . ucfirst($network) . '</span>';
}
if ($link) {
$before_link = '';
$after_link = '';
$before_text = '';
$after_text = '';
// get before / after link tag
if (!empty($args['before_link'])) {
$before_link = $args['before_link'];
}
if (!empty($value['before_link'])) {
$before_link = $args['before_link'];
}
if (!empty($args['after_link'])) {
$after_link = $args['after_link'];
}
if (!empty($value['after_link'])) {
$after_link = $args['after_link'];
}
// get before / after text tag
if (!empty($args['before_text'])) {
$before_link = $args['before_text'];
}
if (!empty($value['before_text'])) {
$before_link = $args['before_text'];
}
if (!empty($args['after_text'])) {
$after_link = $args['after_text'];
}
if (!empty($value['after_text'])) {
$after_link = $args['after_text'];
}
// link text data
if (!is_numeric($key) && is_string($value)) {
$link_text = $value['text'];
} else if (is_array($value) && !empty ($value['text'])) {
$link_text = $value['text'];
}
}
$target = 'target="_blank"';
if (!empty($args['window']) || !isset($args['window'])) {
$target = 'onclick="window.open(this.href, \'mywin\',\'left=50,top=50,width=600,height=350,toolbar=0\'); return false;"';
}
if ($args['link_class']) {
$args['link_class'] .= ' ';
}
$html .=
$before_link .
'<a href="'.$link.'" '.$target.' class="'.$args['link_class'].$network.'" title="'.esc_attr(ucfirst($network)).'">' .
$before_text . $link_text . $after_text .
'</a>' .
$after_link;
}
if ($html) {
$html = $args['before'].$html.$args['after'];
}
echo $html;
}
/**
* show author name
*/
function author($args = array()) {
$args = wp_parse_args($args, array(
'before' => '',
'after' => '',
'before_text' => '',
'after_text' => '',
'link_class' => 'entry-author hcard fn',
'icon' => 'fa-user-circle-o',
/* the theme mod key which contains value to
* check if we need to display author name or not.
* default: article-author
* values: icon, avatar, name, or blank to hide
*/
'article_author_mod_key' => SNEEIT_KEY_ARTICLE_AUTHOR,
));
$show = get_theme_mod($args['article_author_mod_key'], true);
if (!$show) {
return '';
}
switch (trim(strtolower($show))) {
case 'icon':
$args['before_text'] .= (sneeit_font_awesome_tag($args['icon']) . ' ');
break;
case 'avatar':
$avatar = get_avatar($this->au_ID, 16, '', esc_attr($this->au_name));
if (!empty($avatar)) {
$args['before_text'] .= ($avatar . ' ');
}
break;
default:
break;
}
echo $args['before'].'<a class="'.$args['link_class'].'" href="'.$this->au_href.'" target="_blank">'.$args['before_text'].$this->au_name.$args['after_text'].'</a>'.$args['after'];
}
/**
* show date time
*/
function date_time($args = array()) {
$args = wp_parse_args($args, array(
'before' => '',
'after' => '',
'before_text' => '',
'after_text' => '',
'link_class' => 'entry-date updated',
'ago_text' => esc_html__('%s ago', 'sneeit'),
/* the theme mod key which contains value to
* check if wwe show date time or not
* default: article-date-time
* values:
* PUBLISH DATE TIME
* 'full', 'date', 'time', 'short', 'pretty'
*
* UPDATE DATE TIME
* 'updated-full', 'updated-date', 'updated-time', 'updated-short', 'updated-pretty'
* 'modified-full', 'modified-date', 'modified-time', 'modified-short', 'modified-pretty'
*
* if value contains 'updated' or 'modified',
* we will show the updated / modify instead of publish date
*/
'article_date_time_mod_key' => SNEEIT_KEY_ARTICLE_DATE_TIME
));
$show = get_theme_mod($args['article_date_time_mod_key'], true);
if (!$show) {
return '';
}
/* SHOW VALUES */
$source = '';
if (strpos($show, '-') !== false) {
$show = explode('-', $show);
$source = $show[0];
$show = $show[1];
}
$html = '';
if ($source == 'updated' || $source == 'modified') {
switch (trim(strtolower($show))) {
case 'pretty':
$html .= sprintf( $args['ago_text'], human_time_diff(get_the_modified_date( 'U' ), current_time( 'timestamp' ) ) );
break;
case 'short':
if (get_option('date_format')) {
$html .= get_the_modified_date(str_replace('F', 'M', get_option('date_format')));
}
break;
case 'time':
$html .= get_the_modified_time();
break;
case 'date':
$html .= get_the_modified_date();
break;
default:
$html .= get_the_modified_date().' '.get_the_modified_time();
break;
}
} else {
switch ($show) {
case 'pretty':
$html .= sprintf( $args['ago_text'], human_time_diff( get_the_time( 'U' ), current_time( 'timestamp' ) ) );
break;
case 'short':
if (get_option('date_format')) {
$html .= get_the_date(str_replace('F', 'M', get_option('date_format')));
}
break;
case 'time':
$html .= get_the_time();
break;
case 'date':
$html .= get_the_date();
break;
default:
$html .= get_the_date().' '.get_the_time();
break;
}
}
if ($html) {
echo $args['before'].'<a class="'.$args['link_class'].'" href="'.$this->href.'">'.$args['before_text'].$html.$args['after_text'].'</a>'.$args['after'];
}
}
/**
* show comment number
*/
function comments_number($args = array()) {
$args = wp_parse_args($args, array(
'before' => '',
'after' => '',
'before_text' => '<i class="fa fa-comment-o"></i> ',
'after_text' => '',
'link_class' => 'entry-comment-count',
/* the theme mode key contains value to
* check if we need to show or not
*
* default: article-comments-number
*/
'article_comments_number_mod_key' => SNEEIT_KEY_ARTICLE_COMMENTS_NUMBER
));
if (!get_theme_mod($args['article_comments_number_mod_key'], true) || !comments_open()) {
return '';
}
echo $args['before'].'<a class="'.$args['link_class'].'" href="'.$this->comments_href.'">'.$args['before_text'].$this->comments_number.$args['after_text'].'</a>'.$args['after'];
}
/**
* display ads slots which have
* different ads between desktop and mobile
*
* we will get code from theme mod $args['desktop_mod_key'] key
* to display ads for desktop
* and $args['mobile_mod_key'] for mobile
*/
function ads($args = array()) {
if (is_string($args)) {
$args = array(
'id' => $args,
);
}
if (empty($args['id'])) {
$args['id'] = 'article-ads';
}
if (empty($args['desktop_mod_key'])) {
$args['desktop_mod_key'] = $args['id'].'-desktop';
}
if (empty($args['mobile_mod_key'])) {
$args['mobile_mod_key'] = $args['id'].'-mobile';
}
if (empty($args['before'])) {
$args['before'] = '<div id="'.$args['id'].'" class="'.$args['id'].'">';
}
if (empty($args['after'])) {
$args['after'] = '</div>';
}
if (wp_is_mobile()) {
$ads = get_theme_mod($args['mobile_mod_key'], '');
} else {
$ads = get_theme_mod($args['desktop_mod_key'], '');
}
if ($ads) {
echo $args['before'].$ads.$args['after'];
}
}
/**
* display category list
*/
function categories($args = array()) {
$args = wp_parse_args($args, array(
'before' => '',
'after' => '',
'before_text' => '',
'after_text' => '',
'before_link' => '',
'after_link' => '',
'link_class' => 'entry-category',
'show_count' => false,
'before_count' => '',
'after_count' => '',
'separator' => '',
/* the theme mod key contains value to
* check if we need to show or not
*
* default: article-categories
*/
'article_categories_mod_key' => SNEEIT_KEY_ARTICLE_CATEGORIES
));
if (!get_theme_mod($args['article_categories_mod_key'], false)) {
return;
}
$categories = get_the_category();
$html = '';
if ($args['link_class']) {
$args['link_class'] = ' class="'.$args['link_class'].'"';
}
foreach($categories as $category) {
if ($html) {
$html .= $args['separator'];
}
$html .= $args['before_link'];
$html .= '<a'.$args['link_class'].' href="'.get_category_link( $category->term_id ).'" rel="tag">';
$html .= $args['before_text'] . $category->name . $args['after_text'];
if ($args['show_count']) {
$html .= $args['before_count'].$category->count.$args['after_count'];
}
$html .= '</a>'.$args['after_link'];
}
if ($html) {
echo $args['before'] .$html. $args['after'];
}
}
/**
* display tag list
*/
function tags($args = array()) {
$args = wp_parse_args($args, array(
'before' => '',
'after' => '',
'before_text' => '',
'after_text' => '',
'before_link' => '',
'after_link' => '',
'link_class' => 'entry-category',
'show_count' => false,
'before_count' => '',
'after_count' => '',
'separator' => '',
/* the theme mod key contains value to
* check if we need to show or not
*
* default: article-tags
*/
'article_tags_mod_key' => SNEEIT_KEY_ARTICLE_TAGS
));
if (!get_theme_mod($args['article_tags_mod_key'], false)) {
return;
}
$tags = get_the_tags();
if (empty($tags)) {
return;
}
$html = '';
if ($args['link_class']) {
$args['link_class'] = ' class="'.$args['link_class'].'"';
}
foreach($tags as $tag) {
if ($html) {
$html .= $args['separator'];
}
$html .= $args['before_link'];
$html .= '<a'.$args['link_class'].' href="'. get_tag_link( $tag->term_id ).'" rel="tag">';
$html .= $args['before_text'] . $tag->name . $args['after_text'];
if ($args['show_count']) {
$html .= $args['before_count'].$tag->count.$args['after_count'];
}
$html .= '</a>'.$args['after_link'];
}
if ($html) {
echo $args['before'] .$html. $args['after'];
}
}
/**
* show author box
*/
function author_box($args = array()) {
$args = wp_parse_args($args, array(
'before' => '',
'after' => '',
'avatar_size' => 32,
'before_avatar' => '',
'after_avatar' => '',
'before_name' => '',
'after_name' => '',
/* the theme mod key contains value to
* check if we need to show or not
*
* default: article-author-box
*/
'article_author_box_mod_key' => SNEEIT_KEY_ARTICLE_AUTHOR_BOX,
/* the user meta key contains value of
* social links which will be show in author box
* default: user-social-links
* value is a textarea value and will has one social link per line
*/
'user_social_links_key' => SNEEIT_KEY_USER_SOCIAL_LINKS,
/* use this to reorder elements of author box as you want
* html is allowed
*
* Elements:
* [id] [name] [avatar] [link] [social] [bio]
*/
'template' => '',
/* social_args */
));
if (empty($args['template'])) {
return;
}
if (!get_theme_mod($args['article_author_box_mod_key'], false)) {
return;
}
$author_id = get_the_author_meta('ID');
$author_link = get_author_posts_url($author_id);
$author_name = get_the_author_meta( 'display_name' );
// replace id
if (strpos($args['template'], '[id]') !== false) {
$args['template'] = str_replace('[id]', $author_id, $args['template']);
}
// replace name
if (strpos($args['template'], '[name]') !== false) {
$display_name = '<a href="'.$author_link.'" itemprop="url" rel="author"><span itemprop="name">'.$author_name.'</span></a>';
$args['template'] = str_replace('[name]', $display_name, $args['template']);
}
// replace avatar
if (strpos($args['template'], '[avatar]') !== false) {
$args['template'] = str_replace('[avatar]', $args['before_avatar'].'<a href="'.$author_link.'">'.get_avatar($author_id, $args['avatar_size'], '', $author_name).'</a>'.$args['after_avatar'], $args['template']);
}
// replace social links
if (strpos($args['template'], '[social]') !== false) {
$social_args = array(
'urls' => get_user_meta($author_id, $args['user_social_links_key'], true),
'echo' => false,
);
if (!empty($args['social_args'])) {
$social_args = wp_parse_args($social_args, $args['social_args']);
}
$args['template'] = str_replace('[social]', apply_filters('sneeit_social_links_to_fontawesome', $social_args), $args['template']);
}
// replace bio
if (strpos($args['template'], '[bio]') !== false) {
$args['template'] = str_replace('[bio]', '<span itemprop="description">'.get_the_author_meta('description',$author_id).'</span>', $args['template']);
}
// display code
echo $args['before'].'<div itemprop="author" itemscope="itemscope" itemtype="http://schema.org/Person">'.$args['template'].'</div>'.$args['after'];
}
/**
* show post next / prev link
*/
function post_nextprev($args = array()) {
$args = wp_parse_args($args, array(
'before' => '',
'after' => '',
'before_link' => '',
'after_link' => '',
'before_next_link' => '',
'after_next_link' => '',
'before_prev_link' => '',
'after_prev_link' => '',
/* the theme mod key contains value to
* check if we need to show or not
*
* default: article-nextprev
*/
'article_nextpev_mod_key' => SNEEIT_KEY_ARTICLE_NEXTPREV,
));
if (!get_theme_mod($args['article_nextpev_mod_key'], true)) {
return;
}
$has_next = get_adjacent_post(false, '', false);
$has_prev = get_adjacent_post(false, '', true);
if (!($has_next || $has_prev)) {
return;
}
$html = $args['before'];
if ($has_next) {
$html .= $args['before_link'] . $args['before_next_link'];
$html .= get_next_post_link('%link');
$html .= $args['after_next_link'].$args['after_link'];
}
if ($has_prev) {
$html .= $args['before_link'] . $args['before_prev_link'];
$html .= get_previous_post_link('%link');
$html .= $args['after_prev_link'].$args['after_link'];
}
$html .= $args['after'];
echo $html;
}
/**
* show post next / prev link for attachment pages
*/
function image_nextprev($args = array()) {
$args = wp_parse_args($args, array(
'before' => '',
'after' => '',
'before_link' => '',
'after_link' => '',
'next_text' => false,
'prev_text' => false,
'before_next_link' => '',
'after_next_link' => '',
'before_prev_link' => '',
'after_prev_link' => '',
));
$html = '';
$next = '';
ob_start();
next_image_link( false, $args['next_text'] );
$next = ob_get_clean();
if ($next) {
$html .= $args['before_link'] . $args['before_next_link'] . $next . $args['after_next_link'] . $args['after_link'];
}
$prev = '';
ob_start();
previous_image_link( false, $args['prev_text'] );
$prev = ob_get_clean();
if ($prev) {
$html .= $args['before_link'] . $args['before_prev_link'] . $prev . $args['after_prev_link'] . $args['after_link'];
}
if ($html) {
$html = $args['before'] . $html . $args['after'];
}
echo $html;
}
/**
* END OF ARTICLE TAG </article>
*/
function end_tag($args = array()) {
$args = wp_parse_args($args, array(
/* we will get this theme mode value to add schema
* data about your organization
*
* default: site-logo
* value must be an image src
*/
'site_logo_mod_key' => SNEEIT_KEY_SITE_LOGO,
));
/* article image */
$this->article_image();
?><span style="display:none" itemprop="image" itemscope itemtype="https://schema.org/ImageObject"><?php
?><meta itemprop="url" content="<?php echo esc_attr($this->article_image); ?>"><?php
?><meta itemprop="width" content="<?php echo esc_attr($this->article_image_width); ?>"><?php
?><meta itemprop="height" content="<?php echo esc_attr($this->article_image_height); ?>"><?php
?></span><?php
/* date time */
?><meta itemprop="datePublished" content="<?php echo esc_attr(get_the_date('c')); ?>"><?php
?><meta itemprop="dateModified" content="<?php echo esc_attr(get_the_modified_date('c')); ?>"><?php
/* publisher */
?><span itemprop="publisher" itemscope itemtype="https://schema.org/Organization"><?php
if (get_theme_mod('site_logo')) :
?><span itemprop="logo" itemscope itemtype="https://schema.org/ImageObject"><meta itemprop="url" content="<?php echo esc_attr(get_theme_mod($args['site_logo_mod_key']));?>"></span><?php
endif;
?><meta itemprop="name" content="<?php echo esc_attr(get_bloginfo( 'description')) ?>"></span><?php
/* misc */
?><meta itemscope itemprop="mainEntityOfPage" itemType="https://schema.org/WebPage" itemid="<?php
echo esc_attr(get_the_permalink());
?>" content=""/><?php
?></article><?php
}
}
add_filter('sneeit_singular', 'sneeit_singular');
function sneeit_singular($args) {
return (new Sneeit_Singular($args));
}