first commit

This commit is contained in:
2023-09-12 21:41:04 +02:00
commit 3361a7f053
13284 changed files with 2116755 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
<?php
/**
* Class WPML_Adjacent_Links_Hooks_Factory
*
* @author OnTheGoSystems
*/
class WPML_Adjacent_Links_Hooks_Factory implements IWPML_Frontend_Action_Loader, IWPML_Backend_Action_Loader, IWPML_AJAX_Action_Loader {
/** @return WPML_Adjacent_Links_Hooks */
public function create() {
global $sitepress, $wpdb;
return new WPML_Adjacent_Links_Hooks(
$sitepress,
$wpdb,
new WPML_Language_Where_Clause(
$sitepress,
$wpdb,
new WPML_Display_As_Translated_Posts_Query( $wpdb, 'p' )
)
);
}
}

View File

@@ -0,0 +1,95 @@
<?php
/**
* Class WPML_Adjacent_Links_Hooks
*
* @author OnTheGoSystems
*/
class WPML_Adjacent_Links_Hooks implements IWPML_Action {
/** @var SitePress $sitepress */
private $sitepress;
/** @var wpdb $wpdb */
private $wpdb;
/** @var WPML_Language_Where_Clause $language_where_clause */
private $language_where_clause;
/**
* WPML_Adjacent_Links_Hooks constructor.
*
* @param SitePress $sitepress
* @param wpdb $wpdb
* @param WPML_Language_Where_Clause $language_where_clause
*/
public function __construct( SitePress $sitepress, wpdb $wpdb, WPML_Language_Where_Clause $language_where_clause ) {
$this->sitepress = $sitepress;
$this->wpdb = $wpdb;
$this->language_where_clause = $language_where_clause;
}
public function add_hooks() {
add_filter( 'get_previous_post_join', array( $this, 'get_adjacent_post_join' ) );
add_filter( 'get_next_post_join', array( $this, 'get_adjacent_post_join' ) );
add_filter( 'get_previous_post_where', array( $this, 'get_adjacent_post_where' ) );
add_filter( 'get_next_post_where', array( $this, 'get_adjacent_post_where' ) );
}
/**
* @param string $join_clause
*
* @return string
*/
function get_adjacent_post_join( $join_clause ) {
$post_type = $this->get_current_post_type();
$cache_key = md5( wp_json_encode( array( $post_type, $join_clause ) ) );
$cache_group = 'adjacent_post_join';
$join_cached = wp_cache_get( $cache_key, $cache_group );
if ( $join_cached ) {
return $join_cached;
}
if ( $this->sitepress->is_translated_post_type( $post_type ) ) {
$join_clause .= $this->wpdb->prepare(
" JOIN {$this->wpdb->prefix}icl_translations wpml_translations ON wpml_translations.element_id = p.ID AND wpml_translations.element_type = %s",
'post_' . $post_type
);
}
wp_cache_set( $cache_key, $join_clause, $cache_group );
return $join_clause;
}
/**
* @param string $where_clause
*
* @return string
*/
function get_adjacent_post_where( $where_clause ) {
$post_type = $this->get_current_post_type();
$current_lang = $this->sitepress->get_current_language();
$cache_key = md5( wp_json_encode( array( $post_type, $where_clause, $current_lang ) ) );
$cache_group = 'adjacent_post_where';
$where_cached = wp_cache_get( $cache_key, $cache_group );
if ( $where_cached ) {
return $where_cached;
}
$where_clause .= $this->language_where_clause->get( $post_type );
wp_cache_set( $cache_key, $where_clause, $cache_group );
return $where_clause;
}
/** @return string */
private function get_current_post_type() {
return get_post_type() ?: 'post';
}
}