<?php
namespace DgoraWcas\Integrations;
use DgoraWcas\Helpers;
// Exit if accessed directly
if ( !defined( 'ABSPATH' ) ) {
exit;
}
/**
* Class Solver
*
* Solve conflicts with other plugins
*/
class Solver {
public function __construct() {
$this->solveSearchWPWooCommerceIntegration();
$this->solveDiviWithBuilderWC();
$this->solveMedicorCoreScrips();
$this->solveGeoTargetingWPScripts();
$this->solveEmptyImages();
$this->solveAntiSpamCleanTalk();
}
/**
* Solves conflict with SearchWP WooCommerce Integration by SearchWP, LLC
* Tested version: plugin SearchWP WooCommerce Integration by SearchWP v1.2.1
*
* Reason: Empty search page (no results). The plugin removes query_vars['s']
*
* @return void
*/
public function solveSearchWPWooCommerceIntegration() {
if ( isset( $_GET['dgwt_wcas'] ) ) {
add_filter( 'searchwp_woocommerce_forced', '__return_false', PHP_INT_MAX );
add_filter( 'searchwp_short_circuit', '__return_true', PHP_INT_MAX );
}
}
/**
* Solves conflict with the DIVI builder
* Tested version: theme DIVI v3.19.18
*
* Reason: WP Query for search results was overwritten ih the hook pre_get_posts
*/
public function solveDiviWithBuilderWC() {
add_action( 'init', function () {
if ( isset( $_GET['dgwt_wcas'] ) ) {
remove_action( 'pre_get_posts', 'et_builder_wc_pre_get_posts', 10 );
}
} );
}
/**
* Medicor plugin by WpOpal uses wp_dequeue_style( 'dgwt-wcas-style' ); in their code.
* I don't know why they block my CSS, but I have to force to restore it.
*/
private function solveMedicorCoreScrips() {
if ( class_exists( 'MedicorCore' ) ) {
add_action( 'wp_print_styles', function () {
wp_enqueue_style( 'dgwt-wcas-style' );
}, PHP_INT_MAX );
}
}
/**
* Preventing the GeoTargetingWP plugin from loading scripts in the settings page
* because the Selectize.js script is loaded twice
*
* @return void
*/
public function solveGeoTargetingWPScripts() {
if ( !Helpers::isSettingsPage() ) {
return;
}
add_action( 'admin_enqueue_scripts', function () {
wp_dequeue_script( 'geot' );
wp_dequeue_script( 'geot-chosen' );
wp_dequeue_script( 'geot-selectize' );
}, 999 );
}
/**
* Preventing empty image URLs (null) from being passed to the indexer
*
* @return void
*/
public function solveEmptyImages() {
add_filter(
'dgwt/wcas/product/thumbnail_src',
function ( $url, $id, $product ) {
return ( empty( $url ) ? wc_placeholder_img_src() : $url );
},
PHP_INT_MAX - 5,
3
);
add_filter(
'dgwt/wcas/variation/thumbnail_src',
function ( $url, $parentID, $variationID ) {
return ( empty( $url ) ? wc_placeholder_img_src() : $url );
},
PHP_INT_MAX - 5,
3
);
add_filter(
'dgwt/wcas/term/thumbnail_src',
function (
$url,
$termID,
$size,
$term
) {
return ( empty( $url ) ? wc_placeholder_img_src() : $url );
},
PHP_INT_MAX - 5,
4
);
}
/**
* Preventing the Anti-Spam by CleanTalk plugin from securing our search form
*
* Plugin URL: https://wordpress.org/plugins/cleantalk-spam-protect/
*
* @return void
*/
public function solveAntiSpamCleanTalk() {
global $apbct;
if ( !defined( 'APBCT_VERSION' ) ) {
return;
}
// The problem occurs when the "Test default WordPress search form for spam" option is "on".
if ( isset( $apbct->settings['forms__search_test'] ) && !$apbct->settings['forms__search_test'] ) {
return;
}
/**
* In the cleantalk-spam-protect/js/apbct-public-bundle.min.js file, the plugin skips protection
* of the form when it has the "proinput" class (this is the class of another search plugin).
* We use this to make it applicable to our search engine as well.
*/
add_action( 'wp_footer', function () {
?>
<script>
var dgwtWsasForms = document.querySelectorAll('.dgwt-wcas-search-wrapp');
if (dgwtWsasForms.length > 0) {
dgwtWsasForms.forEach(function (form) {
form.classList.add('proinput');
});
}
</script>
<?php
} );
}
}