Horriblesubs/fansub/post.php

510 lines
17 KiB
PHP

<?php
if(!function_exists('add_filter')) exit;
function fansub_post_class($classes) {
$classes[] = 'fansub-post';
$classes[] = 'hentry';
$classes[] = 'entry';
return $classes;
}
add_filter('post_class', 'fansub_post_class');
function fansub_excerpt_more($more) {
$read_more_text = apply_filters('fansub_read_more_text', __('Continue reading', 'fansub'));
$read_more_text = apply_filters('fansub_excerpt_more_text', $read_more_text);
$link = sprintf('<a href="%1$s" class="more-link">%2$s</a>',
esc_url(get_permalink(get_the_ID())),
sprintf($read_more_text . '%s', '<span class="screen-reader-text">' . get_the_title(get_the_ID()) . '</span>')
);
$link = apply_filters('fansub_excerpt_continue_reading_link', $link);
return apply_filters('fansub_excerpt_more', '&hellip; ' . $link);
}
add_filter('excerpt_more', 'fansub_excerpt_more');
function fansub_post_change_content_url($old_url, $new_url) {
global $wpdb;
$sql = "UPDATE $wpdb->posts SET post_content = (REPLACE (post_content, '$old_url', '$new_url'))";
return $wpdb->query($sql);
}
function fansub_get_post_views($post_id = null) {
if(!is_numeric($post_id)) {
$post_id = get_the_ID();
}
$result = get_post_meta($post_id, 'views', true);
$result = absint($result);
if(is_single() && $result < 1) {
$result = 1;
update_post_meta($post_id, 'views', 1);
}
return $result;
}
function fansub_get_post_likes($post_id = null) {
if(!is_numeric($post_id)) {
$post_id = get_the_ID();
}
$result = get_post_meta($post_id, 'likes', true);
$result = absint($result);
return $result;
}
function fansub_get_post_dislikes($post_id = null) {
if(!is_numeric($post_id)) {
$post_id = get_the_ID();
}
$result = get_post_meta($post_id, 'dislikes', true);
$result = absint($result);
return $result;
}
function fansub_get_post_thumbnail_url($post_id = '', $size = 'full') {
$result = '';
if(empty($post_id)) {
$post_id = get_the_ID();
}
if(has_post_thumbnail($post_id)) {
$thumbnail_id = get_post_thumbnail_id($post_id);
if(fansub_media_file_exists($thumbnail_id)) {
$image_attributes = wp_get_attachment_image_src($thumbnail_id, $size);
if($image_attributes) {
$result = $image_attributes[0];
}
}
}
if(empty($result)) {
$result = get_post_meta($post_id, 'thumbnail_url', true);
}
$result = apply_filters('fansub_post_thumbnail_pre_from_content', $result, $post_id, $size);
if(empty($result)) {
$post = get_post($post_id);
if(fansub_object_valid($post)) {
$result = fansub_get_first_image_source($post->post_content);
}
if(empty($result)) {
$thumbnail = fansub_option_get_value('writing', 'default_post_thumbnail');
$thumbnail = fansub_sanitize_media_value($thumbnail);
$result = $thumbnail['url'];
}
}
$result = apply_filters('fansub_post_pre_post_thumbnail', $result, $post_id);
if(empty($result)) {
$no_thumbnail = FANSUB_URL . '/images/no-thumbnail.png';
$no_thumbnail = apply_filters('fansub_no_thumbnail_url', $no_thumbnail);
$result = $no_thumbnail;
}
$result = apply_filters('fansub_post_thumbnail', $result, $post_id);
return $result;
}
function fansub_post_thumbnail_large_if_not_default($result, $post_id) {
if(empty($result)) {
$post_id = get_post_meta($post_id, 'large_thumbnail', true);
}
return $result;
}
add_filter('fansub_post_thumbnail_pre_from_content', 'fansub_post_thumbnail_large_if_not_default', 10, 2);
function fansub_post_thumbnail($args = array()) {
$post_id = isset($args['post_id']) ? $args['post_id'] : '';
if(empty($post_id)) {
$post_id = get_the_ID();
}
if(post_password_required($post_id) || is_attachment()) {
return;
}
$thumbnail_url = fansub_get_value_by_key($args, 'thumbnail_url');
if(empty($thumbnail_url)) {
$large_size = fansub_get_value_by_key($args, 'large_size');
if($large_size) {
$thumbnail_url = get_post_meta($post_id, 'large_thumbnail', true);
$thumbnail_url = fansub_sanitize_media_value($thumbnail_url);
$thumbnail_url = $thumbnail_url['url'];
if(empty($thumbnail_url)) {
$thumbnail_url = fansub_get_post_thumbnail_url($post_id);
}
} else {
$thumbnail_url = fansub_get_post_thumbnail_url($post_id);
}
}
if(empty($thumbnail_url)) {
return;
}
$bfi_thumb = isset($args['bfi_thumb']) ? $args['bfi_thumb'] : true;
$bfi_thumb = apply_filters('fansub_use_bfi_thumb', $bfi_thumb, $post_id);
$size = fansub_sanitize_size($args);
$width = $size[0];
$height = $size[1];
$enlarge = apply_filters('fansub_enlarge_post_thumbnail_on_mobile', false);
if($enlarge && wp_is_mobile()) {
$ratio = 600 / $width;
$ratio = round($ratio);
if($ratio > 1) {
$width *= $ratio;
$height *= $ratio;
}
}
$original = $thumbnail_url;
if($bfi_thumb) {
$params = isset($args['params']) ? $args['params'] : array();
if(is_numeric($width) && $width > 0) {
$params['width'] = $width;
}
if(is_numeric($height) && $height > 0) {
$params['height'] = $height;
}
$bfi_url = apply_filters('fansub_pre_bfi_thumb', '', $thumbnail_url, $params);
if(empty($bfi_url)) {
$bfi_url = bfi_thumb($thumbnail_url, $params);
}
if(!empty($bfi_url)) {
$thumbnail_url = $bfi_url;
}
}
$img = new FANSUB_HTML('img');
if(is_numeric($width) && $width > 0) {
$img->set_attribute('width', $size[0]);
}
if(is_numeric($height) && $height > 0) {
$img->set_attribute('height', $size[1]);
}
$img->set_attribute('data-original', $original);
$permalink = fansub_get_value_by_key($args, 'permalink', get_permalink($post_id));
$lazyload = fansub_get_value_by_key($args, 'lazyload', false);
$before = fansub_get_value_by_key($args, 'before');
$after = fansub_get_value_by_key($args, 'after');
$img->set_attribute('alt', get_the_title($post_id));
$img->set_class('attachment-post-thumbnail wp-post-image img-responsive');
$img->set_attribute('src', $thumbnail_url);
$bk_img = '';
if((bool)$lazyload) {
$img->set_wrap_tag('noscript');
$bk_img = $img->build();
$img->set_wrap_tag('');
$loading_icon = fansub_get_value_by_key($args, 'loading_icon');
if(!fansub_is_image($loading_icon)) {
$loading_icon = fansub_get_image_url('transparent.gif');
}
$img->set_image_src($loading_icon);
$img->set_attribute('data-original', $thumbnail_url);
$img->add_class('lazyload');
}
$loop = isset($args['loop']) ? $args['loop'] : true;
$custom_html = isset($args['custom_html']) ? $args['custom_html'] : '';
$cover = fansub_get_value_by_key($args, 'cover');
$only_image = fansub_get_value_by_key($args, 'only_image');
if((bool)$only_image) {
$img->output();
if((bool)$lazyload) {
echo $bk_img;
}
return;
}
echo $before;
if(is_singular() && !$loop) : ?>
<div class="post-thumbnail entry-thumb"<?php fansub_html_tag_attributes('div', 'entry_thumb'); ?>>
<?php
$img->output();
if((bool)$lazyload) {
echo $bk_img;
}
echo $custom_html;
if(current_theme_supports('fansub-schema')) {
?>
<meta itemprop="url" content="<?php echo $thumbnail_url; ?>">
<meta itemprop="width" content="<?php echo $width; ?>">
<meta itemprop="height" content="<?php echo $height; ?>">
<?php
}
?>
</div>
<?php else : ?>
<?php if(!empty($custom_html)) : ?>
<div class="thumbnail-wrap">
<?php endif; ?>
<a class="post-thumbnail-loop entry-thumb post-thumbnail" href="<?php echo $permalink; ?>" aria-hidden="true"<?php fansub_html_tag_attributes('a', 'entry_thumb'); ?>>
<?php
$img->output();
if((bool)$lazyload) {
echo $bk_img;
}
if($cover) {
echo '<span class="cover"></span>';
}
if(current_theme_supports('fansub-schema')) {
?>
<meta itemprop="url" content="<?php echo $thumbnail_url; ?>">
<meta itemprop="width" content="<?php echo $width; ?>">
<meta itemprop="height" content="<?php echo $height; ?>">
<?php
}
?>
</a>
<?php echo $custom_html; ?>
<?php if(!empty($custom_html)) : ?>
</div>
<?php endif; ?>
<?php
endif;
echo $after;
}
function fansub_post_type_no_featured_field() {
return apply_filters('fansub_post_type_no_featured_field', array('page'));
}
function fansub_get_pages($args = array()) {
return get_pages($args);
}
function fansub_get_pages_by_template($template_name, $args = array()) {
$args['meta_key'] = '_wp_page_template';
$args['meta_value'] = $template_name;
$result = fansub_get_pages($args);
$output = strtoupper(fansub_get_value_by_key($args, 'output'));
if(OBJECT === $output && fansub_array_has_value($result)) {
$result = array_shift($result);
}
return $result;
}
function fansub_get_page_by_template($template_name) {
return fansub_get_pages_by_template($template_name, array('output' => 'object'));
}
function fansub_article_before($post_class = '') {
$article = '<article ';
ob_start();
post_class($post_class);
$article .= ob_get_clean();
$article .= ' data-id="' . get_the_ID() . '"';
if(current_theme_supports('fansub-schema')) {
ob_start();
fansub_html_tag_attributes('article', 'post');
$article .= ob_get_clean();
}
$article .= '>';
$article = apply_filters('fansub_article_before', $article);
echo $article;
}
function fansub_article_after() {
echo '</article><!-- #post-## -->';
}
function fansub_post_title_link($args = array()) {
$title = fansub_get_value_by_key($args, 'title');
$permalink = fansub_get_value_by_key($args, 'permalink', get_permalink());
if(empty($title)) {
the_title(sprintf('<h2 class="entry-title post-title" itemprop="headline"><a href="%s" rel="bookmark">', esc_url($permalink)), '</a></h2>');
} else {
$title = sprintf('<h2 class="entry-title post-title" itemprop="headline"><a href="%s" rel="bookmark">', esc_url($permalink)) . $title . '</a></h2>';
echo $title;
}
}
function fansub_post_title_single($args = array()) {
$class = fansub_get_value_by_key($args, 'class');
fansub_add_string_with_space_before($class, 'entry-title post-title');
$tag = fansub_get_value_by_key($args, 'tag', 'h1');
the_title('<' . $tag . ' class="' . $class . '" itemprop="headline">', '</' . $tag . '>');
}
function fansub_article_header($args = array()) {
$loop = isset($args['loop']) ? $args['loop'] : false;
$entry_meta = isset($args['entry_meta']) ? $args['entry_meta'] : true;
?>
<header class="entry-header">
<?php
if(!$loop && (is_single() || is_singular())) {
fansub_post_title_single();
} else {
fansub_post_title_link();
}
if(!is_page() && $entry_meta) {
?>
<div class="entry-meta">
<?php fansub_entry_meta(); ?>
</div><!-- .entry-meta -->
<?php
}
?>
</header><!-- .entry-header -->
<?php
}
function fansub_article_content() {
?>
<div class="entry-content">
<?php the_content(); ?>
</div>
<?php
}
function fansub_article_footer($args = array()) {
$entry_meta = isset($args['entry_meta']) ? $args['entry_meta'] : true;
?>
<footer class="entry-footer">
<?php if($entry_meta) : ?>
<div class="entry-meta">
<?php fansub_entry_meta(); ?>
<?php edit_post_link( __( 'Edit', 'fansub' ), '<span class="edit-link">', '</span>' ); ?>
</div>
<?php endif; ?>
</footer><!-- .entry-footer -->
<?php
}
function fansub_post_author_box() {
if((is_single() || is_singular()) && get_the_author_meta('description')) {
get_template_part('fansub/theme/biography');
}
}
function fansub_post_get_taxonomies($object, $output = 'names') {
return get_object_taxonomies($object, $output);
}
function fansub_post_get_top_parent_terms($post, $taxonomy = 'any') {
$result = array();
$taxonomies = array($taxonomy);
if('any' === $taxonomy) {
$taxonomies = fansub_post_get_taxonomies($post);
}
foreach($taxonomies as $tax) {
$terms = wp_get_post_terms($post->ID, $tax);
foreach($terms as $term) {
if($term->parent != 0) {
$term = fansub_term_get_top_most_parent($term);
}
$result[] = $term;
}
}
return $result;
}
function fansub_post_get_first_term($post_id = null, $taxonomy = 'category') {
if(!fansub_id_number_valid($post_id)) {
$post_id = get_the_ID();
}
$terms = wp_get_post_terms($post_id, $taxonomy);
if(fansub_array_has_value($terms)) {
$terms = current($terms);
}
return $terms;
}
function fansub_insert_post($args = array()) {
$post_title = '';
$post_content = '';
$post_status = 'pending';
$post_type = 'post';
$post_author = 1;
$first_admin = fansub_get_first_admin();
if($first_admin) {
$post_author = $first_admin->ID;
}
$defaults = array(
'post_title' => $post_title,
'post_content' => $post_content,
'post_status' => $post_status,
'post_type' => $post_type,
'post_author' => $post_author,
'ping_status' => get_option('default_ping_status'),
'post_parent' => 0,
'menu_order' => 0,
'to_ping' => '',
'pinged' => '',
'post_password' => '',
'guid' => '',
'post_content_filtered' => '',
'post_excerpt' => '',
'import_id' => 0
);
$args = wp_parse_args($args, $defaults);
$args['post_title'] = wp_strip_all_tags($args['post_title']);
$post_id = wp_insert_post($args);
return $post_id;
}
function fansub_get_post_by_meta($key, $value, $args = array()) {
$defaults = array(
'post_type' => 'any',
'posts_per_page' => -1,
'meta_key' => $key,
'meta_value' => $value
);
$args = wp_parse_args($args, $defaults);
return fansub_query($args);
}
function fansub_get_post_by_column($column_name, $column_value, $output = 'OBJECT', $args = array()) {
global $wpdb;
$post_type = fansub_get_value_by_key($args, 'post_type');
$post_types = fansub_sanitize_array($post_type);
$output = strtoupper($output);
$sql = $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE $column_name = %s", $column_value);
$count_type = 0;
foreach($post_types as $post_type) {
if(0 == $count_type) {
$sql .= " AND post_type = '$post_type'";
} else {
$sql .= " OR post_type = '$post_type'";
}
$count_type++;
}
$post_id = $wpdb->get_var($sql);
$result = '';
switch($output) {
case OBJECT:
if(fansub_id_number_valid($post_id)) {
$result = get_post($post_id);
}
break;
default:
$result = $post_id;
}
return $result;
}
function fansub_get_post_id_by_slug($slug) {
return fansub_get_post_by_column('post_name', $slug, 'post_id');
}
function fansub_get_post_permalink_by_slug($slug, $default = 'home') {
$post = fansub_get_post_by_slug($slug);
if(is_a($post, 'WP_Post')) {
return get_permalink($post);
}
if('home' == $default) {
$default = get_home_url();
}
return $default;
}
function fansub_get_post_by_slug($slug) {
return fansub_get_post_by_column('post_name', $slug);
}
function fansub_get_author_posts_url() {
global $authordata;
if(!fansub_object_valid($authordata)) {
return '';
}
return get_author_posts_url($authordata->ID, $authordata->user_nicename);
}
function fansub_get_post_meta($meta_key, $post_id = null) {
if(!fansub_id_number_valid($post_id)) {
$post_id = get_the_ID();
}
return get_post_meta($post_id, $meta_key, true);
}
function fansub_get_post_comment_count($post_id = null, $status = 'approved') {
if(!fansub_id_number_valid($post_id)) {
$post_id = get_the_ID();
}
$comments = get_comment_count($post_id);
return fansub_get_value_by_key($comments, $status);
}