165 lines
4.7 KiB
PHP
165 lines
4.7 KiB
PHP
<?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
|
|
} );
|
|
}
|
|
|
|
}
|