| Current Path : /home/ereika83/www/wp-content/plugins/squirrly-seo/classes/helpers/ |
| Current File : /home/ereika83/www/wp-content/plugins/squirrly-seo/classes/helpers/Tools.php |
<?php
defined('ABSPATH') || die('Cheatin\' uh?');
/**
* Handles the parameters and url
*
* @author Squirrly
*/
class SQ_Classes_Helpers_Tools
{
/**
*
*
* @var array Options, User Metas, Package and Plugin details
*/
public static $options, $usermeta, $allplugins = array();
public function __construct()
{
self::$options = $this->getOptions();
//Load the languages pack
add_action("init", array($this, 'loadMultilanguage'), PHP_INT_MAX);
SQ_Classes_ObjController::getClass('SQ_Classes_HookController')->setHooks($this);
}
/**
* This hook will save the current version in database
*
* @return void
*/
function hookInit()
{
//If the token si not yet set, run the instalation process
//check the User Roles, DB and DevKit
if(!self::getOption('sq_api')){
self::install();
}
//Create Qss table if not exists
if($qssModel = SQ_Classes_ObjController::getClass('SQ_Models_Qss')){
$qssModel->checkTableExists();
}
//Check the updates
self::checkUpdate();
//add extra links to the plugin in the Plugins list
add_filter("plugin_row_meta", array($this, 'hookExtraLinks'), 10, 4);
//add setting link in plugin
add_filter('plugin_action_links', array($this, 'hookActionlink'), 5, 2);
}
/**
* Install the required data
*
* @return void
*/
public static function install(){
//remove any sitemap cache from older versions of Squirrly
$filesystem = self::initFilesystem();
if ($filesystem->is_dir(_SQ_CACHE_DIR_)) {
$files = $filesystem->dirlist(_SQ_CACHE_DIR_ ); // get all file names
if(!empty($files)){
foreach($files as $file => $data){ // iterate files
if($filesystem->exists(_SQ_CACHE_DIR_ . $file) && strpos($file, '.html') !== false) {
$filesystem->delete(_SQ_CACHE_DIR_ . $file); // delete file
}
}
}
if($filesystem->is_dir(_SQ_CACHE_DIR_ . 'sitemap')){
$filesystem->rmdir(_SQ_CACHE_DIR_ . 'sitemap');
}
}
//Add the Squirrly User Role
SQ_Classes_ObjController::getClass('SQ_Models_RoleManager')->addSQRoles();
//This option is use for custom Package installations
//update text in case of devkit
SQ_Classes_ObjController::getClass('SQ_Classes_Helpers_DevKit')->checkPluginData();
}
/**
* Add a link to settings in the plugin list
*
* @param array $links
* @param string $file
* @return array
*/
public function hookActionlink($links, $file)
{
if ($file == _SQ_PLUGIN_NAME_ . '/squirrly.php') {
$link = '<a href="' . self::getAdminUrl('sq_dashboard') . '">' . esc_html__("Getting started", 'squirrly-seo') . '</a>';
array_unshift($links, $link);
}
return $links;
}
/**
* Adds extra links to plugin page
*
* @param $meta
* @param $file
* @param $data
* @param $status
* @return array
*/
public function hookExtraLinks($meta, $file, $data = null, $status = null)
{
if ($file == _SQ_PLUGIN_NAME_ . '/squirrly.php') {
echo '<style>
.ml-stars{display:inline-block;color:#ffb900;position:relative;top:3px}
.ml-stars svg{fill:#ffb900}
.ml-stars svg:hover{fill:#ffb900}
.ml-stars svg:hover ~ svg{fill:none}
</style>';
$meta[] = "<a href='https://howto12.squirrly.co/kb/install-squirrly-seo-plugin/' target='_blank'>" . esc_html__("Documentation", 'squirrly-seo') . "</a>";
$meta[] = "<a href='https://wordpress.org/support/plugin/squirrly-seo/reviews/#new-post' target='_blank' title='" . esc_attr__("Leave a review", 'squirrly-seo') . "'><i class='ml-stars'><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg></i></a>";
}
return $meta;
}
/**
* Load the Options from user option table in DB
*
* @param string $action
* @return array|mixed|object
*/
public static function getOptions($action = '')
{
$default = array(
//Global settings
'sq_version' => '',
'sq_api' => '',
'sq_installed' => gmdate('Y-m-d H:i:s'),
//
'sq_cloud_connect' => 0,
'sq_cloud_token' => false,
'sq_notification' => true,
'sq_alert_overview' => true,
'sq_alert_journey' => true,
//Advanced settings
'sq_seoexpert' => 0,
//later buffer load
'sq_laterload' => 0,
'sq_audit_email' => '',
'sq_posts_per_page' => get_option( 'posts_per_page' ),
//SEO Journey
'sq_seojourney' => 0,
'sq_seojourney_congrats' => 1,
'sq_menu_visited' => array(),
//minify Squirrly Metas
'sq_load_css' => 0,
'sq_minify' => 0,
'sq_non_utf8_support' => 1,
//Settings Assistant
'sq_assistant' => 1,
'sq_complete_uninstall' => 0,
//Onboarding
'sq_mode' => 0,
'sq_onboarding' => 0,
'sq_onboarding_data' => array(),
// Redirects
'sq_redirects' => 0,
// Reusable schemas
'sq_jsonld_reusable_schemas' => 0,
//Live Assistant
'sq_sla' => 1,
'sq_sla_frontend' => 0,
'sq_sla_otherkeywords' => 1,
'sq_sla_type' => 'auto',
'sq_sla_exclude_post_types' => array(),
'sq_keyword_help' => 1,
'sq_local_images' => 0,
'sq_img_licence' => 1,
'sq_sla_social_fetch' => 0,
'sq_media_library_images' => 0,
//JsonLD
'sq_auto_jsonld' => 0,
'sq_auto_jsonld_local' => 0,
'sq_jsonld_type' => 'Organization',
'sq_jsonld_personal' => 0,
'sq_jsonld_global_person' => 0,
'sq_jsonld_breadcrumbs' => 1,
'sq_jsonld_woocommerce' => 1,
'sq_jsonld_clearcode' => 0,
'sq_jsonld_product_rating' => 0,
'sq_jsonld_product_custom' => 1,
'sq_jsonld_product_defaults' => 0,
'sq_jsonld_local' => array(
'priceRange' => '',
'servesCuisine' => '',
'menu' => '',
'acceptsReservations' => '',
'openingHoursSpecification' => array(
array(
'@type' => 'OpeningHoursSpecification',
'dayOfWeek' => 'Monday',
'opens' => '',
'closes' => '',
),
array(
'@type' => 'OpeningHoursSpecification',
'dayOfWeek' => 'Tuesday',
'opens' => '',
'closes' => '',
),
array(
'@type' => 'OpeningHoursSpecification',
'dayOfWeek' => 'Wednesday',
'opens' => '',
'closes' => '',
),
array(
'@type' => 'OpeningHoursSpecification',
'dayOfWeek' => 'Thursday',
'opens' => '',
'closes' => '',
),
array(
'@type' => 'OpeningHoursSpecification',
'dayOfWeek' => 'Friday',
'opens' => '',
'closes' => '',
),
array(
'@type' => 'OpeningHoursSpecification',
'dayOfWeek' => 'Saturday',
'opens' => '',
'closes' => '',
),
array(
'@type' => 'OpeningHoursSpecification',
'dayOfWeek' => 'Sunday',
'opens' => '',
'closes' => '',
),
),
),
'sq_jsonld' => array(
'Organization' => array(
'name' => '',
'url' => '',
'logo' => array(
'@type' => 'ImageObject',
'url' => '',
),
'contactPoint' => array(
'@type' => 'ContactPoint',
'telephone' => '',
'contactType' => '',
),
'address' => array(
'@type' => 'PostalAddress',
'streetAddress' => '',
'addressLocality' => '',
'addressRegion' => '',
'postalCode' => '',
'addressCountry' => '',
),
'place' => array(
'@type' => 'Place',
'geo' => array(
'@type' => 'GeoCoordinates',
'latitude' => '',
'longitude' => '',
),
),
'description' => ''
),
'Person' => array(
'name' => '',
'image' => array(
'@type' => 'ImageObject',
'url' => '',
),
'telephone' => '',
'jobTitle' => '',
'description' => ''
)),
//Auto-Indexing api
'sq_auto_indexnow' => true,
'indexnow_key' => false,
'indexnow_post_type' => array('post'),
'indexnow_endpoints' => array(),
//Sitemap
'sq_auto_sitemap' => 0,
'sq_sitemap_ping' => 0,
'sq_sitemap_exclude_noindex' => 0,
'sq_sitemap_show' => array(
'images' => 1,
'videos' => 1,
),
'sq_sitemap_perpage' => 500,
'sq_sitemap_frequency' => 'weekly',
'sq_sitemap_combinelangs' => 0,
'sq_sitemap_do_cache' => 1,
'sq_sitemap_cache' => array(),
'sq_sitemap' => array(
'sitemap' => array('sitemap.xml', 1),
'sitemap-home' => array('sitemap-home.xml', 1),
'sitemap-news' => array('sitemap-news.xml', 0),
'sitemap-product' => array('sitemap-product.xml', 1),
'sitemap-post' => array('sitemap-posts.xml', 1),
'sitemap-page' => array('sitemap-pages.xml', 1),
'sitemap-category' => array('sitemap-categories.xml', 1),
'sitemap-post_tag' => array('sitemap-tags.xml', 1),
'sitemap-archive' => array('sitemap-archives.xml', 1),
'sitemap-author' => array('sitemap-authors.xml', 0),
'sitemap-custom-tax' => array('sitemap-custom-taxonomies.xml', 0),
'sitemap-custom-post' => array('sitemap-custom-posts.xml', 0),
'sitemap-attachment' => array('sitemap-attachment.xml', 0),
),
//Robots
'sq_auto_robots' => 0,
'sq_robots_permission' => array(
'User-agent: *',
'Disallow: */trackback/',
'Disallow: */xmlrpc.php',
'Disallow: /wp-*.php',
'Disallow: /cgi-bin/',
'Disallow: /wp-admin/',
'Allow: */wp-content/uploads/',),
//Metas
'sq_use' => 1,
'sq_auto_metas' => 0,
'sq_auto_links' => 0,
'sq_auto_redirects' => 1,
'sq_auto_title' => 1,
'sq_auto_description' => 1,
'sq_auto_keywords' => 1,
'sq_keywordtag' => 0,
'sq_auto_canonical' => 1,
'sq_auto_dublincore' => 0,
'sq_auto_feed' => 0,
'sq_auto_noindex' => 1,
'sq_use_frontend' => 0,
'sq_use_backend' => 1,
'sq_use_dashboard' => 1,
'sq_attachment_redirect' => 0,
'sq_term_noindex_empty' => 1,
'404_url_redirect' => home_url(),
'sq_external_nofollow' => 1,
'sq_external_exception' => array(),
'sq_external_blank' => 0,
'sq_metas' => array(
'title_maxlength' => 75,
'description_maxlength' => 320,
'og_title_maxlength' => 75,
'og_description_maxlength' => 200,
'tw_title_maxlength' => 75,
'tw_description_maxlength' => 280,
'jsonld_title_maxlength' => 75,
'jsonld_description_maxlength' => 320,
),
//favicon
'sq_auto_favicon' => 0,
'sq_favicon_apple' => 1,
'favicon' => '',
//Ranking Option
'sq_google_country' => 'com',
'sq_google_language' => 'en',
'sq_google_device' => 'desktop',
'sq_google_serpsperhour' => 500,
'connect' => array(
'google_analytics' => 0,
'google_search_console' => 0,
),
// dev kit
'sq_auto_devkit' => 1,
'sq_devkit_logo' => false,
'sq_devkit_name' => false,
'sq_devkit_menu_name' => false,
'sq_devkit_audit_success' => false,
'sq_devkit_audit_fail' => false,
//menu restrictions
'menu' => array(
'show_account_info' => 1,
'show_seogoals' => 1,
'show_features' => 1,
'show_onpagesetup' => 1,
'show_journey' => 1,
'show_research' => 1,
'show_assistant' => 1,
'show_automation' => 1,
'show_bulkseo' => 1,
'show_focuspages' => 1,
'show_audit' => 1,
'show_rankings' => 1,
'show_tutorial' => 1,
'show_redirects' => 1,
'show_innerlinks' => 1,
'show_indexnow' => 1,
'show_categories' => 1,
'show_reusables' => 1,
'show_seo' => 1,
'show_ads' => 1,
),
//socials
'sq_auto_facebook' => 0,
'sq_auto_twitter' => 0,
'sq_og_locale' => 'en_US',
'sq_og_image' => '',
'sq_tc_image' => '',
'socials' => array(
'fb_admins' => array(),
'fbconnectkey' => "",
'fbadminapp' => "",
'facebook_site' => "",
'twitter_site' => "https://twitter.com/twitter",
'twitter' => "",
'instagram_url' => "",
'linkedin_url' => "",
'myspace_url' => "",
'pinterest_url' => "",
'youtube_url' => "",
'twitter_card_type' => "summary_large_image",
'plus_publisher' => ""
),
//Webmasters and Tracking
'sq_auto_amp' => 0,
'sq_auto_tracking' => 0,
'sq_auto_pixels' => 0,
'sq_tracking_logged_users' => 0,
'sq_tracking_ip_users' => 1,
'sq_auto_webmasters' => 0,
'sq_analytics_google_js' => 'analytics',
'codes' => array(
'google_wt' => "",
'google_analytics' => "",
'facebook_pixel' => "",
'bing_wt' => "",
'baidu_wt' => "",
'yandex_wt' => "",
'pinterest_verify' => "",
'norton_verify' => "",
),
//Innerlinks
'sq_auto_innelinks' => 0,
'sq_innelinks_global' => 0,
'sq_innelinks_links_per_keyword' => 1,
'sq_innelinks_links_per_target' => 0,
'sq_innelinks_exclude_tags' => array('headline'),
'sq_innelinks_post_types' => array('post','page'),
'sq_innelinks_link_template' => '',
'sq_innelinks_link_nofollow' => 0,
'sq_innelinks_link_blank' => 0,
//Patterns
'sq_auto_pattern' => 0,
'patterns' => array(
'home' => array(
'protected' => 1,
'sep' => '|',
'title' => '{{sitename}} {{page}} {{sep}} {{sitedesc}}',
'description' => '{{excerpt}} {{page}} {{sep}} {{sitename}}',
'noindex' => 0,
'nofollow' => 0,
'og_type' => 'website',
'jsonld_types' => array('website'),
'do_metas' => 1,
'do_sitemap' => 1,
'do_jsonld' => 1,
'do_pattern' => 1,
'do_og' => 1,
'do_twc' => 1,
'do_analytics' => 1,
'do_fpixel' => 1,
'do_redirects' => 0,
),
'post' => array(
'protected' => 1,
'sep' => '|',
'title' => '{{title}} {{page}}',
'description' => '{{excerpt}}',
'noindex' => 0,
'nofollow' => 0,
'og_type' => 'article',
'jsonld_types' => array('newsarticle'),
'do_metas' => 1,
'do_sitemap' => 1,
'do_jsonld' => 1,
'do_pattern' => 1,
'do_og' => 1,
'do_twc' => 1,
'do_analytics' => 1,
'do_fpixel' => 1,
'do_redirects' => 1,
'google_news' => 1,
),
'page' => array(
'protected' => 1,
'sep' => '|',
'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
'description' => '{{excerpt}}',
'noindex' => 0,
'nofollow' => 0,
'og_type' => 'website',
'jsonld_types' => array('website'),
'do_metas' => 1,
'do_sitemap' => 1,
'do_jsonld' => 1,
'do_pattern' => 1,
'do_og' => 1,
'do_twc' => 1,
'do_analytics' => 1,
'do_fpixel' => 1,
'do_redirects' => 1,
'google_news' => 0,
),
'product' => array(
'protected' => 1,
'sep' => '|',
'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
'description' => '{{excerpt}}',
'noindex' => 0,
'nofollow' => 0,
'og_type' => 'product',
'jsonld_types' => array('product'),
'do_metas' => 1,
'do_sitemap' => 1,
'do_jsonld' => 1,
'do_pattern' => 1,
'do_og' => 1,
'do_twc' => 1,
'do_analytics' => 1,
'do_fpixel' => 1,
'do_redirects' => 1,
'google_news' => 0,
),
'category' => array(
'protected' => 1,
'sep' => '|',
'title' => '{{category}} {{page}} {{sep}} {{sitename}}',
'description' => '{{category_description}}',
'noindex' => 0,
'nofollow' => 0,
'og_type' => 'website',
'jsonld_types' => array('website'),
'do_metas' => 1,
'do_sitemap' => 1,
'do_jsonld' => 0,
'do_pattern' => 1,
'do_og' => 1,
'do_twc' => 1,
'do_analytics' => 1,
'do_fpixel' => 1,
'do_redirects' => 0,
),
'tag' => array(
'protected' => 1,
'sep' => '|',
'title' => '{{tag}} {{page}} {{sep}} {{sitename}}',
'description' => '{{excerpt}}',
'noindex' => 0,
'nofollow' => 0,
'og_type' => 'website',
'jsonld_types' => array('website'),
'do_metas' => 1,
'do_sitemap' => 1,
'do_jsonld' => 0,
'do_pattern' => 1,
'do_og' => 1,
'do_twc' => 1,
'do_analytics' => 1,
'do_fpixel' => 1,
'do_redirects' => 0,
),
'tax-product_cat' => array(
'protected' => 1,
'sep' => '|',
'title' => '{{term_title}} ' . esc_html__("Category", 'squirrly-seo') . ' {{page}} {{sep}} {{sitename}}',
'description' => '{{excerpt}}',
'noindex' => 0,
'nofollow' => 0,
'og_type' => 'website',
'jsonld_types' => array('website'),
'do_metas' => 1,
'do_sitemap' => 1,
'do_jsonld' => 1,
'do_pattern' => 1,
'do_og' => 1,
'do_twc' => 1,
'do_analytics' => 1,
'do_fpixel' => 1,
'do_redirects' => 0,
),
'tax-product_tag' => array(
'protected' => 1,
'sep' => '|',
'title' => '{{term_title}} ' . esc_html__("Tag", 'squirrly-seo') . ' {{page}} {{sep}} {{sitename}}',
'description' => '{{excerpt}}',
'noindex' => 0,
'nofollow' => 0,
'og_type' => 'website',
'jsonld_types' => array('website'),
'do_metas' => 1,
'do_sitemap' => 1,
'do_jsonld' => 1,
'do_pattern' => 1,
'do_og' => 1,
'do_twc' => 1,
'do_analytics' => 1,
'do_fpixel' => 1,
'do_redirects' => 0,
),
'tax-post_format' => array(
'protected' => 1,
'sep' => '|',
'title' => '{{term_title}} ' . esc_html__("Format", 'squirrly-seo') . ' {{page}} {{sep}} {{sitename}}',
'description' => '{{excerpt}}',
'noindex' => 0,
'nofollow' => 0,
'og_type' => 'website',
'jsonld_types' => array('website'),
'do_metas' => 1,
'do_sitemap' => 1,
'do_jsonld' => 1,
'do_pattern' => 1,
'do_og' => 1,
'do_twc' => 1,
'do_analytics' => 1,
'do_fpixel' => 1,
'do_redirects' => 0,
),
'tax-category' => array(
'protected' => 1,
'sep' => '|',
'title' => '{{term_title}} ' . esc_html__("Category", 'squirrly-seo') . ' {{page}} {{sep}} {{sitename}}',
'description' => '{{excerpt}}',
'noindex' => 0,
'nofollow' => 0,
'og_type' => 'website',
'jsonld_types' => array('website'),
'do_metas' => 1,
'do_sitemap' => 1,
'do_jsonld' => 1,
'do_pattern' => 1,
'do_og' => 1,
'do_twc' => 1,
'do_analytics' => 1,
'do_fpixel' => 1,
'do_redirects' => 0,
),
'tax-post_tag' => array(
'protected' => 1,
'sep' => '|',
'title' => '{{term_title}} ' . esc_html__("Tag", 'squirrly-seo') . ' {{page}} {{sep}} {{sitename}}',
'description' => '{{excerpt}}',
'noindex' => 0,
'nofollow' => 0,
'og_type' => 'website',
'jsonld_types' => array('website'),
'do_metas' => 1,
'do_sitemap' => 1,
'do_jsonld' => 1,
'do_pattern' => 1,
'do_og' => 1,
'do_twc' => 1,
'do_analytics' => 1,
'do_fpixel' => 1,
'do_redirects' => 0,
),
'tax-product_shipping_class' => array(
'protected' => 1,
'sep' => '|',
'title' => '{{term_title}} ' . esc_html__("Shipping Option", 'squirrly-seo') . ' {{page}} {{sep}} {{sitename}}',
'description' => '{{excerpt}}',
'noindex' => 0,
'nofollow' => 0,
'og_type' => 'website',
'jsonld_types' => array('website'),
'do_metas' => 1,
'do_sitemap' => 1,
'do_jsonld' => 1,
'do_pattern' => 1,
'do_og' => 1,
'do_twc' => 1,
'do_analytics' => 1,
'do_fpixel' => 1,
'do_redirects' => 0,
),
'shop' => array(
'protected' => 1,
'sep' => '|',
'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
'description' => '{{excerpt}}',
'noindex' => 0,
'nofollow' => 0,
'og_type' => 'website',
'jsonld_types' => array('website'),
'do_metas' => 1,
'do_sitemap' => 1,
'do_jsonld' => 1,
'do_pattern' => 1,
'do_og' => 1,
'do_twc' => 1,
'do_analytics' => 1,
'do_fpixel' => 1,
'do_redirects' => 0,
),
'profile' => array(
'protected' => 1,
'sep' => '|',
'title' => '{{name}}, ' . esc_html__("Author at", 'squirrly-seo') . ' {{sitename}} {{page}}',
'description' => '{{excerpt}}',
'noindex' => 0,
'nofollow' => 0,
'og_type' => 'profile',
'jsonld_types' => array('profile'),
'do_metas' => 1,
'do_sitemap' => 1,
'do_jsonld' => 1,
'do_pattern' => 1,
'do_og' => 1,
'do_twc' => 1,
'do_analytics' => 1,
'do_fpixel' => 1,
'do_redirects' => 0,
),
'archive' => array(
'protected' => 1,
'sep' => '|',
'title' => '{{plural}} {{date}} {{page}} {{sep}} {{sitename}}',
'description' => '{{excerpt}}',
'noindex' => 0,
'nofollow' => 0,
'og_type' => 'website',
'jsonld_types' => array('website'),
'do_metas' => 1,
'do_sitemap' => 1,
'do_jsonld' => 1,
'do_pattern' => 1,
'do_og' => 1,
'do_twc' => 1,
'do_analytics' => 1,
'do_fpixel' => 1,
'do_redirects' => 0,
),
'search' => array(
'protected' => 1,
'sep' => '|',
'title' => esc_html__("Are you looking for", 'squirrly-seo') . ' {{searchphrase}}? {{page}} {{sep}} {{sitename}}',
'description' => esc_html__("These are the results for", 'squirrly-seo') . ' {{searchphrase}} ' . esc_html__("that you can find on our website.", 'squirrly-seo') . ' {{excerpt}}',
'noindex' => 1,
'nofollow' => 0,
'og_type' => 'website',
'jsonld_types' => array('website'),
'do_metas' => 1,
'do_sitemap' => 0,
'do_jsonld' => 1,
'do_pattern' => 1,
'do_og' => 1,
'do_twc' => 1,
'do_analytics' => 1,
'do_fpixel' => 1,
),
'attachment' => array(
'protected' => 1,
'sep' => '|',
'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
'description' => '{{excerpt}}',
'noindex' => 0,
'nofollow' => 0,
'og_type' => 'website',
'jsonld_types' => array('website'),
'do_metas' => 1,
'do_sitemap' => 1,
'do_jsonld' => 1,
'do_pattern' => 1,
'do_og' => 1,
'do_twc' => 1,
'do_analytics' => 1,
'do_fpixel' => 1,
'do_redirects' => 1,
),
'404' => array(
'protected' => 1,
'sep' => '|',
'title' => esc_html__("Page not found", 'squirrly-seo') . ' {{sep}} {{sitename}}',
'description' => esc_html__("This page could not be found on our website.", 'squirrly-seo') . ' {{excerpt}}',
'noindex' => 1,
'nofollow' => 1,
'og_type' => 'website',
'jsonld_types' => array('website'),
'do_metas' => 1,
'do_sitemap' => 0,
'do_jsonld' => 0,
'do_pattern' => 1,
'do_og' => 0,
'do_twc' => 0,
'do_analytics' => 1,
'do_fpixel' => 1,
'do_redirects' => 0,
),
'custom' => array(
'protected' => 1,
'sep' => '|',
'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
'description' => '{{excerpt}}',
'noindex' => 0,
'nofollow' => 0,
'og_type' => 'website',
'jsonld_types' => array('website'),
'do_metas' => 1,
'do_sitemap' => 1,
'do_jsonld' => 1,
'do_pattern' => 1,
'do_og' => 1,
'do_twc' => 1,
'do_analytics' => 1,
'do_fpixel' => 1,
'do_redirects' => 0,
'google_news' => 0,
),
)
);
$options = json_decode(get_option(SQ_OPTION), true);
//Replace the default options with the database data
if (is_array($options)) {
$options = array_replace_recursive($default, $options);
//Add recommended settings
if ($action == 'reset') {
$options['sq_auto_jsonld'] = 0;
$options['sq_auto_sitemap'] = 0;
$options['sq_sitemap_exclude_noindex'] = 0;
$options['sq_sitemap_ping'] = 0;
$options['sq_attachment_redirect'] = 0;
$options['sq_auto_metas'] = 0;
$options['sq_auto_amp'] = 0;
$options['sq_auto_robots'] = 0;
$options['sq_auto_facebook'] = 0;
$options['sq_sla_social_fetch'] = 0;
$options['sq_auto_twitter'] = 0;
$options['sq_auto_tracking'] = 0;
$options['sq_auto_pixels'] = 0;
$options['sq_auto_webmasters'] = 0;
$options['sq_auto_pattern'] = 0;
$options['sq_use_frontend'] = 0;
$options['sq_auto_favicon'] = 0;
$options['sq_auto_indexnow'] = 0;
$options['sq_auto_innelinks'] = 0;
$options['sq_redirects'] = 0;
}
//Add recommended settings
if ($action == 'recommended' || $action == 'expert') {
$options['sq_auto_jsonld'] = 1;
$options['sq_auto_sitemap'] = 1;
$options['sq_sitemap_exclude_noindex'] = 1;
$options['sq_sitemap_ping'] = 1;
$options['sq_attachment_redirect'] = 1;
$options['sq_auto_metas'] = 1;
$options['sq_auto_amp'] = 1;
$options['sq_auto_robots'] = 1;
$options['sq_auto_facebook'] = 1;
$options['sq_sla_social_fetch'] = 1;
$options['sq_auto_twitter'] = 1;
$options['sq_auto_tracking'] = 1;
$options['sq_auto_pixels'] = 1;
$options['sq_auto_webmasters'] = 1;
$options['sq_auto_pattern'] = 1;
$options['sq_use_frontend'] = 1;
$options['sq_auto_indexnow'] = 1;
$options['sq_auto_innelinks'] = 1;
$options['sq_redirects'] = 1;
}
if ($action == 'expert') {
$options['sq_use_frontend'] = 1;
}
return $options;
}
return $default;
}
/**
* Check the updates
* @return void
*/
public static function checkUpdate(){
$current_version = SQ_Classes_Helpers_Tools::getOption( 'sq_version' );
//do the upgrade
if ( version_compare( $current_version, SQ_VERSION, '<' ) ) {
//Update the Json-LD for Organization Logo
if ( isset( self::$options['sq_jsonld']['Organization']['logo'] ) && ! is_array( self::$options['sq_jsonld']['Organization']['logo'] ) ) {
self::$options['sq_jsonld']['Organization']['logo'] = array(
'@type' => 'ImageObject',
'url' => self::$options['sq_jsonld']['Organization']['logo'],
);
}
if ( isset( self::$options['sq_jsonld']['Organization']['telephone'] ) && isset( self::$options['sq_jsonld']['Organization']['contactType'] ) ) {
self::$options['sq_jsonld']['Organization']['contactPoint'] = array(
'@type' => 'ContactPoint',
'telephone' => self::$options['sq_jsonld']['Organization']['telephone'],
'contactType' => self::$options['sq_jsonld']['Organization']['contactType']
);
unset( self::$options['sq_jsonld']['Organization']['telephone'] );
unset( self::$options['sq_jsonld']['Organization']['contactType'] );
}
//repair patterns if error
if ( isset( self::$options['patterns'] ) && ! self::$options['patterns'] ) {
unset( self::$options['patterns'] );
}
//Update the Json-LD for Person Image
if ( isset( self::$options['sq_jsonld']['Person']['logo'] ) ) {
self::$options['sq_jsonld']['Person']['image'] = array(
'@type' => 'ImageObject',
'url' => self::$options['sq_jsonld']['Person']['logo'],
);
unset( self::$options['sq_jsonld']['Person']['logo'] );
}
//12.3.22
if(SQ_VERSION == '12.3.22'){
if ( isset( self::$options['patterns'] ) ) {
self::$options['patterns']['post']['google_news'] = 1;
}
}
//update the version
self::$options['sq_version'] = SQ_VERSION;
//update multilingual options
do_action( 'sq_save_settings_after', self::$options);
//update the version
SQ_Classes_Helpers_Tools::saveOptions();
}
}
/**
* Get the option from database
*
* @param $key
* @return mixed
*/
public static function getOption($key)
{
if (!isset(self::$options[$key])) {
self::$options = self::getOptions();
if (!isset(self::$options[$key])) {
self::$options[$key] = false;
}
}
return apply_filters('sq_option_' . $key, self::$options[$key]);
}
/**
* Save the Options in user option table in DB
*
* @param null $key
* @param string $value
*/
public static function saveOptions($key = null, $value = '')
{
if (isset($key)) {
self::$options[$key] = $value;
}
update_option(SQ_OPTION, wp_json_encode(self::$options));
}
/**
* Get user metas
*
* @param null $user_id
* @return array|mixed
*/
public static function getUserMetas($user_id = null)
{
if (!isset($user_id)) {
$user_id = get_current_user_id();
}
$default = array('sq_auto_sticky' => 0,);
$usermeta = get_user_meta($user_id);
$usermetatmp = array();
if (is_array($usermeta)) foreach ($usermeta as $key => $values) {
$usermetatmp[$key] = $values[0];
}
$usermeta = $usermetatmp;
if (is_array($usermeta)) {
$usermeta = array_merge((array)$default, (array)$usermeta);
} else {
$usermeta = $default;
}
self::$usermeta = $usermeta;
return $usermeta;
}
/**
* Get use meta
*
* @param $value
* @return bool
*/
public static function getUserMeta($value)
{
if (!isset(self::$usermeta[$value])) {
self::getUserMetas();
}
if (isset(self::$usermeta[$value])) {
return apply_filters('sq_usermeta_' . $value, self::$usermeta[$value]);
}
return false;
}
/**
* Save user meta
*
* @param $key
* @param $value
* @param null $user_id
*/
public static function saveUserMeta($key, $value, $user_id = null)
{
if (!isset($user_id)) {
$user_id = get_current_user_id();
}
self::$usermeta[$key] = $value;
update_user_meta($user_id, $key, $value);
}
/**
* Delete User meta
*
* @param $key
* @param null $user_id
*/
public static function deleteUserMeta($key, $user_id = null)
{
if (!isset($user_id)) {
$user_id = get_current_user_id();
}
unset(self::$usermeta[$key]);
delete_user_meta($user_id, $key);
}
/**
* Get the option from database
*
* @param $key
* @return mixed
*/
public static function getMenuVisible($key)
{
if(self::$options['sq_auto_devkit']) {
if (!isset(self::$options['menu'][$key])) {
self::$options = self::getOptions();
if (!isset(self::$options['menu'][$key])) {
self::$options['menu'][$key] = false;
}
}
return apply_filters('sq_menu_visible', self::$options['menu'][$key], $key);
}
return true;
}
/**
* Set the header type
*
* @param string $type
*/
public static function setHeader($type)
{
switch ($type) {
case 'json':
header('Content-Type: application/json');
break;
case 'ico':
header('Content-Type: image/x-icon');
break;
case 'png':
header('Content-Type: image/png');
break;
case'text':
header("Content-type: text/plain");
break;
case'html':
header("Content-type: text/html");
break;
}
}
/**
* Set the Nonce action
*
* @param $action
* @param string $name
* @param bool $referer
* @param bool $echo
* @return string
*/
public static function setNonce($action, $name = '_wpnonce', $referer = true, $echo = true)
{
$nonce_field = '<input type="hidden" name="' . esc_attr($name) . '" value="' . esc_attr(wp_create_nonce($action)) . '" />';
if ($referer) {
$nonce_field .= wp_referer_field(false);
}
if ($echo) {
echo $nonce_field;
}
return $nonce_field;
}
/**
* Get a value from $_POST / $_GET
* if unavailable, take a default value
*
* @param string $key Value key
* @param mixed $defaultValue (optional)
* @param bool $htmlcode
* @param bool $keep_newlines
*
* @return mixed Value
*/
public static function getValue( $key, $defaultValue = false, $keep_newlines = false ) {
if ( ! isset( $key ) || ( isset( $key ) && $key == '' ) ) {
return $defaultValue;
}
//Get the params from forms
if ( isset( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] === 'POST' ) {
$ret = ( isset( $_POST[ $key ] ) ? $_POST[ $key ] : ( isset( $_GET[ $key ] ) ? $_GET[ $key ] : '' ) );
} else {
$ret = ( isset( $_GET[ $key ] ) ? $_GET[ $key ] : '' );
}
//Start sanitization of each param
//based on the type
if ( is_array( $ret ) ) { //if array, sanitize each value from the array
if ( ! empty( $ret ) ) {
foreach ( $ret as &$row ) {
if ( ! is_array( $row ) ) {
$row = sanitize_text_field( $row ); //sanitize
}
}
}
} elseif ( is_string( $ret ) && $ret <> '' && $keep_newlines && function_exists( 'sanitize_textarea_field' ) ) {
$ret = sanitize_textarea_field( $ret );
} else {
if(in_array($key, array('stype', 'sstatus', 'squery', 'skeyword'))){
$ret = SQ_Classes_Helpers_Sanitize::sanitizeSearch( $ret );
}
$ret = sanitize_text_field( $ret );
}
if ( ! $ret ) {
return $defaultValue;
} else {
return wp_unslash( $ret );
}
}
/**
* Check if the parameter is set
*
* @param string $key
* @return boolean
*/
public static function getIsset($key)
{
return (isset($_GET[$key]) || isset($_POST[$key]));
}
/**
* Find the string in the content
*
* @param string $content
* @param string $string
* @param bool $normalize
* @return bool|false|int
*/
public static function findStr($content, $string, $normalize = false)
{
if ($normalize) {
//Check if the search requires char normalization
$content = SQ_Classes_Helpers_Sanitize::normalizeChars($content);
$string = SQ_Classes_Helpers_Sanitize::normalizeChars($string);
} else {
//decode the content to match quotes and special chars
$content = html_entity_decode($content, ENT_QUOTES);
$string = html_entity_decode($string, ENT_QUOTES);
}
if (function_exists('mb_stripos')) {
return mb_stripos($content, $string);
} else {
SQ_Classes_Error::setMessage(esc_html__("For better text comparison you need to install PHP mbstring extension.", 'squirrly-seo'));
return stripos($content, $string);
}
}
/**
* Get the first key of the given array without affecting
* the internal array pointer
*
* @param $arr
*
* @return false|int|string
*/
public static function arrayKeyFirst( $arr ) {
if(!empty($arr)){
foreach ( $arr as $key => $value ) {
return $key;
}
}
return false;
}
/**
* Load the multilanguage support from .mo
*/
public function loadMultilanguage()
{
$locale = get_user_locale();
$locale = apply_filters( 'plugin_locale', $locale, _SQ_PLUGIN_NAME_ );
unload_textdomain( _SQ_PLUGIN_NAME_ );
$loaded = load_textdomain( _SQ_PLUGIN_NAME_, WP_LANG_DIR . '/plugins/' . _SQ_PLUGIN_NAME_ . $locale . '.mo' );
if ( ! $loaded ) {
$loaded = load_plugin_textdomain(_SQ_PLUGIN_NAME_, false, _SQ_PLUGIN_NAME_ . '/languages/');
}
if ( ! $loaded ) {
$loaded = load_muplugin_textdomain( _SQ_PLUGIN_NAME_, _SQ_PLUGIN_NAME_ . '/languages/' );
}
if ( ! $loaded ) {
$loaded = load_theme_textdomain( _SQ_PLUGIN_NAME_, get_stylesheet_directory() . '/languages/' );
}
if ( ! $loaded ) {
$locale = apply_filters( 'plugin_locale', function_exists( 'determine_locale' ) ? determine_locale() : get_locale(), _SQ_PLUGIN_NAME_ );
$mofile = _SQ_PLUGIN_NAME_ . '/languages/' . _SQ_PLUGIN_NAME_ . '-' . $locale . '.mo';
load_textdomain( _SQ_PLUGIN_NAME_, $mofile );
}
}
/**
* Hook the activate process
*/
public function sq_activate()
{
set_transient('sq_activate', true);
set_transient('sq_import', true);
/** @var SQ_Models_Qss $qssModel Create Qss table if not exists */
if($qssModel = SQ_Classes_ObjController::getClass('SQ_Models_Qss')){
$qssModel->checkTableExists();
$qssModel->alterTable();
}
//Install & Initialize
self::install();
}
/**
* Hook the deactivate process
*/
public function sq_deactivate()
{
SQ_Classes_ObjController::getClass('SQ_Models_RoleManager')->removeSQCaps();
SQ_Classes_ObjController::getClass('SQ_Models_RoleManager')->removeSQRoles();
}
/**
* Empty the cache from other plugins
*/
public static function emptyCache()
{
try {
//////////////////////////////////////////////////////////////////////////////
if (function_exists('w3tc_pgcache_flush')) {
w3tc_pgcache_flush();
}
if (function_exists('w3tc_minify_flush')) {
w3tc_minify_flush();
}
if (function_exists('w3tc_dbcache_flush')) {
w3tc_dbcache_flush();
}
if (function_exists('w3tc_objectcache_flush')) {
w3tc_objectcache_flush();
}
//////////////////////////////////////////////////////////////////////////////
if (function_exists('wp_cache_clear_cache')) {
wp_cache_clear_cache();
}
if (function_exists('rocket_clean_domain') && function_exists('rocket_clean_minify') && function_exists('rocket_clean_cache_busting')) {
// Remove all cache files
rocket_clean_domain();
rocket_clean_minify();
rocket_clean_cache_busting();
}
//////////////////////////////////////////////////////////////////////////////
if (function_exists('apc_clear_cache')) {
// Remove all apc if enabled
apc_clear_cache();
}
//////////////////////////////////////////////////////////////////////////////
if (class_exists('Cache_Enabler_Disk') && method_exists('Cache_Enabler_Disk', 'clear_cache')) {
// clear disk cache
Cache_Enabler_Disk::clear_cache();
}
//////////////////////////////////////////////////////////////////////////////
if (class_exists('LiteSpeed_Cache')) {
LiteSpeed_Cache::get_instance()->purge_all();
}
//////////////////////////////////////////////////////////////////////////////
// If WP Super Cache is being used, clear the cache.
if ( function_exists( 'wp_cache_clean_cache' ) ) {
global $file_prefix;
wp_cache_clean_cache( $file_prefix );
}
//////////////////////////////////////////////////////////////////////////////
// If SG CachePress is installed, reset its caches.
if ( class_exists( 'SG_CachePress_Supercacher' ) && is_callable( [ 'SG_CachePress_Supercacher', 'purge_cache' ] ) ) {
\SG_CachePress_Supercacher::purge_cache();
}
//////////////////////////////////////////////////////////////////////////////
if (self::isPluginInstalled('hummingbird-performance/wp-hummingbird.php')) {
do_action('wphb_clear_page_cache');
}
//////////////////////////////////////////////////////////////////////////////
if (class_exists('WpeCommon')) {
if (method_exists('WpeCommon', 'purge_memcached')) {
WpeCommon::purge_memcached();
}
if (method_exists('WpeCommon', 'clear_maxcdn_cache')) {
WpeCommon::clear_maxcdn_cache();
}
if (method_exists('WpeCommon', 'purge_varnish_cache')) {
WpeCommon::purge_varnish_cache();
}
}
//////////////////////////////////////////////////////////////////////////////
if (self::isPluginInstalled('sg-cachepress/sg-cachepress.php') && class_exists('Supercacher')) {
if (method_exists('Supercacher', 'purge_cache') && method_exists('Supercacher', 'delete_assets')) {
Supercacher::purge_cache();
Supercacher::delete_assets();
}
}
//Clear the fastest cache
global $wp_fastest_cache;
if (isset($wp_fastest_cache) && method_exists($wp_fastest_cache, 'deleteCache')) {
$wp_fastest_cache->deleteCache();
}
//////////////////////////////////////////////////////////////////////////////
} catch (Exception $e) {
}
}
/**
* Clear Squirrly local cache
* @return void
*/
public static function emptyLocalCache(){
/** @var SQ_Classes_Helpers_Cache $cache */
$cache = SQ_Classes_ObjController::getClass( 'SQ_Classes_Helpers_Cache' );
//clear the cache
$cache->invalidateCache();
}
/**
* Check if it's Ajax Call
* @return bool
*/
public static function isAjax()
{
return (defined('DOING_AJAX') && DOING_AJAX);
}
/**
* Check if a plugin is installed
*
* @param $name
* @return bool
*/
public static function isPluginInstalled($name)
{
if (empty(self::$allplugins)) {
self::$allplugins = (array)get_option('active_plugins', array());
if (is_multisite()) {
self::$allplugins = array_merge(array_values(self::$allplugins), array_keys(get_site_option('active_sitewide_plugins')));
}
}
if (!empty(self::$allplugins)) {
return in_array($name, self::$allplugins, true);
}
return false;
}
/**
* Check whether the theme is active.
*
* @param string $theme Theme folder/main file.
*
* @return boolean
*/
public static function isThemeActive( $theme )
{
if (function_exists('wp_get_theme') ) {
$themes = wp_get_theme();
if (isset($themes->name) && stripos($themes->name, $theme) !== false) {
return true;
}
if (isset($themes->template) && stripos($themes->template, $theme) !== false) {
return true;
}
}
return false;
}
/**
* Check if frontend and user is logged in
*
* @return bool
*/
public static function isFrontAdmin()
{
return (!is_admin() && (function_exists('is_user_logged_in') && is_user_logged_in()));
}
/**
* Check if user is in dashboard
*
* @return bool
*/
public static function isBackedAdmin()
{
return (is_admin() || is_network_admin());
}
/**
* Check if the current website is an E-commerce website
*
* @return bool
*/
public static function isEcommerce()
{
if(self::isPluginInstalled('woocommerce/woocommerce.php')) {
return true;
}
$products = array('product', 'wpsc-product');
$post_types = get_post_types(array('public' => true));
foreach ($products as $type) {
if (in_array($type, array_keys($post_types))) {
return true;
}
}
return false;
}
/**
* Check if it's an AMP Endpoint
*
* @return bool|void
*/
public static function isAMPEndpoint()
{
if (defined('AMPFORWP_AMP_QUERY_VAR')) {
$url_path = trim(parse_url(add_query_arg(array()), PHP_URL_PATH), '/');
$explode_path = explode('/', $url_path);
if (AMPFORWP_AMP_QUERY_VAR === end($explode_path)) {
return true;
}
}
if (function_exists('is_amp_endpoint')) {
return is_amp_endpoint();
}
if (function_exists('is_amp') && is_amp()) {
return is_amp();
}
if (function_exists('ampforwp_is_amp_endpoint')) {
return ampforwp_is_amp_endpoint();
}
return false;
}
/**
* Check if the current editor is a block editor
*
* @return bool|mixed|null
*/
public static function isBlockEditor()
{
// Check WordPress version.
if ( version_compare( get_bloginfo( 'version' ), '5.0.0', '<' ) ) {
return false;
}
$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : false;
if ( ! $screen instanceof WP_Screen ) {
return false;
}
if ( method_exists( $screen, 'is_block_editor' ) ) {
return $screen->is_block_editor();
}
if ( 'post' === $screen->base ) {
if ( ! post_type_exists( $screen->post_type ) ) {
return false;
}
if ( ! post_type_supports( $screen->post_type , 'editor' ) ) {
return false;
}
$post_type_object = get_post_type_object( $screen->post_type );
if ( $post_type_object && ! $post_type_object->show_in_rest ) {
return false;
}
return apply_filters( 'use_block_editor_for_post_type', true, $screen->post_type );
}
return false;
}
/**
* Check the user capability for the roles attached
*
* @param $cap
* @param mixed ...$args
* @return bool
*/
public static function userCan($cap, ...$args )
{
if (current_user_can($cap, ...$args)) {
return true;
}
$user = wp_get_current_user();
if (count((array)$user->roles) > 1) {
foreach ($user->roles as $role) {
$role_object = get_role($role);
if ($role_object && $role_object->has_cap($cap)) {
return true;
}
}
}
return false;
}
/**
* Get the admin url for the specific age
*
* @param string $page
* @param string $tab
* @param array $args
* @return string The cleaned URL after the 'clean_url' filter is applied.
*/
public static function getAdminUrl($page, $tab = null, $args = array())
{
if (strpos($page, '.php')) {
$url = admin_url($page);
} else {
$url = admin_url('admin.php?page=' . $page);
}
if (isset($tab) && $tab <> '') {
$url .= '&tab=' . $tab;
}
if (!empty($args)) {
if (strpos($url, '?') !== false) {
$url .= '&';
} else {
$url .= '?';
}
$url .= join('&', $args);
}
return apply_filters('sq_menu_url', $url, $page, $tab, $args);
}
/**
* Add pagination to tabels
* @param $max_page
*
* @return void
*/
public static function pagination( $max_page = 1 ) {
$pagination = '';
$paged = (int)SQ_Classes_Helpers_Tools::getValue('spage', 1);
$pages = paginate_links( array(
'base' => '%_%',
'format' => '?spage=%#%',
'current' => $paged,
'total' => $max_page,
'type' => 'array'
) );
if( is_array( $pages ) && !empty($pages) ) {
$pagination = '<ul class="pagination">';
foreach ( $pages as $page ) {
$pagination .= "<li class='page-item nav-links'>$page</li>";
}
$pagination .= '</ul>';
}
echo $pagination;
}
/**
* Add the sorting option to Squirrly SEO tables
* @param $title
* @param $sort
* @param $order
*
* @return void
*/
public static function sort($title, $sort, $order = 'asc'){
$icon = '';
if($sort == SQ_Classes_Helpers_Tools::getValue('ssort')){
$order = (SQ_Classes_Helpers_Tools::getValue('sorder') == 'asc' ? 'desc' : 'asc');
$icon = '<i class="ml-1 fa-solid '.($order == 'asc' ? 'fa-sort-down' : 'fa-sort-up').'" style="font-size: 10px !important;"></i>';
}
$sorting = '<a href="'.esc_url(add_query_arg(array('ssort' => $sort, 'sorder' => $order))).'" class="text-white">';
$sorting .= $title . $icon;
$sorting .= '</a>';
echo $sorting;
}
/**
* Instantiates the WordPress filesystem.
*
* @static
* @access public
* @return WP_Filesystem_Base
*/
public static function initFilesystem()
{
// The WordPress filesystem.
global $wp_filesystem;
if (! function_exists('WP_Filesystem') ) {
include_once ABSPATH . 'wp-admin/includes/file.php';
}
WP_Filesystem();
if (!$wp_filesystem->connect()) {
add_filter( 'filesystem_method', function ($method) { return 'direct';}, 1);
WP_Filesystem();
}
return $wp_filesystem;
}
}