HEX
Server: Apache
System: Linux WWW 6.1.0-40-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.153-1 (2025-09-20) x86_64
User: web11 (1011)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: /var/www/studis.kauko.lt/wp-content/themes/twentytwentyfour/functions.php
<?php
/**
 * Twenty Twenty-Four functions and definitions
 *
 * @link https://developer.wordpress.org/themes/basics/theme-functions/
 *
 * @package Twenty Twenty-Four
 * @since Twenty Twenty-Four 1.0
 */

/**
 * Register block styles.
 */

if ( ! function_exists( 'twentytwentyfour_block_styles' ) ) :
	/**
	 * Register custom block styles
	 *
	 * @since Twenty Twenty-Four 1.0
	 * @return void
	 */
	function twentytwentyfour_block_styles() {

		register_block_style(
			'core/details',
			array(
				'name'         => 'arrow-icon-details',
				'label'        => __( 'Arrow icon', 'twentytwentyfour' ),
				/*
				 * Styles for the custom Arrow icon style of the Details block
				 */
				'inline_style' => '
				.is-style-arrow-icon-details {
					padding-top: var(--wp--preset--spacing--10);
					padding-bottom: var(--wp--preset--spacing--10);
				}

				.is-style-arrow-icon-details summary {
					list-style-type: "\2193\00a0\00a0\00a0";
				}

				.is-style-arrow-icon-details[open]>summary {
					list-style-type: "\2192\00a0\00a0\00a0";
				}',
			)
		);
		register_block_style(
			'core/post-terms',
			array(
				'name'         => 'pill',
				'label'        => __( 'Pill', 'twentytwentyfour' ),
				/*
				 * Styles variation for post terms
				 * https://github.com/WordPress/gutenberg/issues/24956
				 */
				'inline_style' => '
				.is-style-pill a,
				.is-style-pill span:not([class], [data-rich-text-placeholder]) {
					display: inline-block;
					background-color: var(--wp--preset--color--base-2);
					padding: 0.375rem 0.875rem;
					border-radius: var(--wp--preset--spacing--20);
				}

				.is-style-pill a:hover {
					background-color: var(--wp--preset--color--contrast-3);
				}',
			)
		);
		register_block_style(
			'core/list',
			array(
				'name'         => 'checkmark-list',
				'label'        => __( 'Checkmark', 'twentytwentyfour' ),
				/*
				 * Styles for the custom checkmark list block style
				 * https://github.com/WordPress/gutenberg/issues/51480
				 */
				'inline_style' => '
				ul.is-style-checkmark-list {
					list-style-type: "\2713";
				}

				ul.is-style-checkmark-list li {
					padding-inline-start: 1ch;
				}',
			)
		);
		register_block_style(
			'core/navigation-link',
			array(
				'name'         => 'arrow-link',
				'label'        => __( 'With arrow', 'twentytwentyfour' ),
				/*
				 * Styles for the custom arrow nav link block style
				 */
				'inline_style' => '
				.is-style-arrow-link .wp-block-navigation-item__label:after {
					content: "\2197";
					padding-inline-start: 0.25rem;
					vertical-align: middle;
					text-decoration: none;
					display: inline-block;
				}',
			)
		);
		register_block_style(
			'core/heading',
			array(
				'name'         => 'asterisk',
				'label'        => __( 'With asterisk', 'twentytwentyfour' ),
				'inline_style' => "
				.is-style-asterisk:before {
					content: '';
					width: 1.5rem;
					height: 3rem;
					background: var(--wp--preset--color--contrast-2, currentColor);
					clip-path: path('M11.93.684v8.039l5.633-5.633 1.216 1.23-5.66 5.66h8.04v1.737H13.2l5.701 5.701-1.23 1.23-5.742-5.742V21h-1.737v-8.094l-5.77 5.77-1.23-1.217 5.743-5.742H.842V9.98h8.162l-5.701-5.7 1.23-1.231 5.66 5.66V.684h1.737Z');
					display: block;
				}

				/* Hide the asterisk if the heading has no content, to avoid using empty headings to display the asterisk only, which is an A11Y issue */
				.is-style-asterisk:empty:before {
					content: none;
				}

				.is-style-asterisk:-moz-only-whitespace:before {
					content: none;
				}

				.is-style-asterisk.has-text-align-center:before {
					margin: 0 auto;
				}

				.is-style-asterisk.has-text-align-right:before {
					margin-left: auto;
				}

				.rtl .is-style-asterisk.has-text-align-left:before {
					margin-right: auto;
				}",
			)
		);
	}
endif;

add_action( 'init', 'twentytwentyfour_block_styles' );

/**
 * Enqueue block stylesheets.
 */

if ( ! function_exists( 'twentytwentyfour_block_stylesheets' ) ) :
	/**
	 * Enqueue custom block stylesheets
	 *
	 * @since Twenty Twenty-Four 1.0
	 * @return void
	 */
	function twentytwentyfour_block_stylesheets() {
		/**
		 * The wp_enqueue_block_style() function allows us to enqueue a stylesheet
		 * for a specific block. These will only get loaded when the block is rendered
		 * (both in the editor and on the front end), improving performance
		 * and reducing the amount of data requested by visitors.
		 *
		 * See https://make.wordpress.org/core/2021/12/15/using-multiple-stylesheets-per-block/ for more info.
		 */
		wp_enqueue_block_style(
			'core/button',
			array(
				'handle' => 'twentytwentyfour-button-style-outline',
				'src'    => get_parent_theme_file_uri( 'assets/css/button-outline.css' ),
				'ver'    => wp_get_theme( get_template() )->get( 'Version' ),
				'path'   => get_parent_theme_file_path( 'assets/css/button-outline.css' ),
			)
		);
	}
endif;

add_action( 'init', 'twentytwentyfour_block_stylesheets' );

/**
 * Register pattern categories.
 */

if ( ! function_exists( 'twentytwentyfour_pattern_categories' ) ) :
	/**
	 * Register pattern categories
	 *
	 * @since Twenty Twenty-Four 1.0
	 * @return void
	 */
	function twentytwentyfour_pattern_categories() {

		register_block_pattern_category(
			'twentytwentyfour_page',
			array(
				'label'       => _x( 'Pages', 'Block pattern category', 'twentytwentyfour' ),
				'description' => __( 'A collection of full page layouts.', 'twentytwentyfour' ),
			)
		);
	}
endif;

add_action( 'init', 'twentytwentyfour_pattern_categories' );

// Uždedame savo logotipą virš prisijungimo formos
function custom_login_logo() {
    ?>
    <style type="text/css">
        body.login {
            background-color: #f6f6f6;
        }

        .login h1 a {
            background-image: url('<?php echo esc_url( get_stylesheet_directory_uri() . '/assets/images/logo-header.png' ); ?>');
            background-size: contain;
            width: 100%;
            height: 80px;
        }

        /* Perkeliame kalbos pasirinkimą viršun */
        #login form + p + div {
            position: absolute;
            top: 10px;
            right: 10px;
            z-index: 10;
        }
    </style>
    <?php
}
add_action('login_head', 'custom_login_logo');

// Keičiame logotipo nuorodą (paspaudus ant jo)
function custom_login_logo_url() {
    return home_url();
}
add_filter('login_headerurl', 'custom_login_logo_url');

// Keičiame „title“ tekstą (užvedus pelę ant logotipo)
function custom_login_logo_title() {
    return get_bloginfo('name');
}
add_filter('login_headertitle', 'custom_login_logo_title');

// Pašalina nuorodas iš prisijungimo lango: pamiršote slaptažodį ir grįžti į svetainę
add_action('login_enqueue_scripts', function () {
    ?>
    <style>
        .login #nav a[href*="lostpassword"],
        .login #backtoblog {
            display: none !important;
        }
    </style>
    <?php
});

add_filter('login_form_bottom', function ($content) {
    ob_start();
    ?>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const remember = document.querySelector('.forgetmenot');
            if (remember) {
                remember.remove(); // Pašalinam iš DOM
            }
        });
    </script>
    <?php
    return $content . ob_get_clean();
});

add_action('login_footer', function () {
    ?>
    <style>
        .custom-language-wrapper {
            margin-top: 1em;
            margin-bottom: 1em;
        }

        .custom-language-wrapper label {
            font-weight: bold;
            display: block;
            margin-bottom: 4px;
        }

        .custom-language-wrapper select {
            width: 100%;
            padding: 6px;
            font-size: 14px;
            border: 1px solid #ccc;
            border-radius: 4px;
            background-image: none !important;
        }

        /* Pašalinam mygtuką "Keisti" */
        .custom-language-wrapper input[type="submit"] {
            display: none !important;
        }

        /* Pašalinam ikoną */
        .custom-language-wrapper label span.dashicons,
        .custom-language-wrapper .screen-reader-text {
            display: none !important;
        }
    </style>

    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const langForm = document.querySelector('.language-switcher form');
            const passwordRow = document.querySelector('#user_pass')?.closest('.user-pass-wrap');
            const rememberBlock = document.querySelector('.forgetmenot');

            if (rememberBlock) {
                rememberBlock.remove(); // Pašalinam visą "Remember Me" checkboxą
            }

            if (langForm && passwordRow) {
                // Sukuriame naują apvalkalą
                const wrapper = document.createElement('div');
                wrapper.className = 'custom-language-wrapper';

                // Perkeliame VISĄ kalbos formą į apvalkalą
                wrapper.appendChild(langForm);

                // Įdedam po slaptažodžio laukeliu
                passwordRow.insertAdjacentElement('afterend', wrapper);

                // Automatinis submit
                const select = langForm.querySelector('select');
                select?.addEventListener('change', function () {
                    this.form.submit();
                });

                // Pašalinam likusį seną konteinerį (jei dar yra)
                const oldWrapper = document.querySelector('.language-switcher');
                if (oldWrapper && oldWrapper !== wrapper) {
                    oldWrapper.remove();
                }
            }
        });
    </script>
    <?php
});

add_filter('gettext', function ($translated, $original, $domain) {
    // Detect language
    $locale = determine_locale();

    // Lietuvių
    if ($locale === 'lt_LT') {
        if ($original === 'Username or Email Address') {
            return 'Prisijungimo vardas <br/> (be @go.kauko.lt galūnės)';
        }
    }

    // Anglų (galima keisti formuluotes)
    if ($locale === 'en_US') {
        if ($original === 'Username or Email Address') {
            return 'Username <br/> (without @go.kauko.lt ending)';
        }
    }

    return $translated;
}, 10, 3);

add_filter('login_errors', function () {
    $locale = determine_locale();
    return $locale === 'lt_LT'
        ? '<strong>Klaida</strong>: Prisijungimas nepavyko. Patikrinkite duomenis.'
        : '<strong>Error</strong>: Login failed. Please check your credentials.';
});

add_filter('show_admin_bar', function ($show) {
    return current_user_can('subscriber') ? false : $show;
});

// Blokuoja wp-admin visiems, kurie nėra turinio redaktoriai (pvz., prenumeratoriams)
add_action('admin_init', function () {
    if ( ! current_user_can('edit_posts') && ! wp_doing_ajax() ) {
        wp_safe_redirect( home_url() );
        exit;
    }
});

add_filter( 'rest_authentication_errors', function( $result ) {
  if ( ! empty( $result ) ) return $result;

  // Leisti tik The Events Calendar REST
  $uri  = $_SERVER['REQUEST_URI'] ?? '';
  $path = parse_url( $uri, PHP_URL_PATH );

  if ( is_string($path) && 0 === strpos($path, '/wp-json/tribe/') ) {
    return true; // autentifikacija laikoma atlikta – tik šitam keliui
  }

  // Alternatyvus formatas
  if ( isset($_GET['rest_route']) && 0 === strpos((string)$_GET['rest_route'], '/tribe/') ) {
    return true;
  }

  return $result; // viskam kitam – kaip buvo
}, 10 );


// 1) Įterpiam CUSTOM dropdown'ą su vėliavėlėmis į core/navigation
add_filter('render_block', function($content, $block){
    if (empty($block['blockName']) || $block['blockName'] !== 'core/navigation') {
        return $content;
    }
    if (!function_exists('pll_the_languages')) {
        return $content;
    }

    // Gausim kalbas RAW formatu
    $langs = pll_the_languages([
        'raw'  => 1,
        'hide_if_no_translation' => 0,
    ]);
    if (!$langs) return $content;

    // Einamoji kalba
    $current = null;
    foreach ($langs as $l) { if (!empty($l['current_lang'])) { $current = $l; break; } }
    if (!$current) $current = reset($langs);

    // Pagaminam HTML (mygtukas + meniu)
    ob_start(); ?>
    <div class="lang-dd" data-lang-dd>
      <button class="lang-dd__btn" type="button" aria-haspopup="listbox" aria-expanded="false">
        <?php if (!empty($current['flag'])): ?>
          <img src="<?php echo esc_url($current['flag']); ?>" alt="<?php echo esc_attr($current['name']); ?>" />
        <?php endif; ?>
        <span><?php echo esc_html($current['name']); ?></span>
        <svg class="lang-dd__chev" viewBox="0 0 20 20" width="14" height="14" aria-hidden="true"><path d="M5 7l5 6 5-6z"/></svg>
      </button>
      <ul class="lang-dd__menu" role="listbox" hidden>
        <?php foreach ($langs as $lang): ?>
          <li role="option" aria-selected="<?php echo $lang['current_lang'] ? 'true':'false'; ?>">
            <a href="<?php echo esc_url($lang['url']); ?>" class="<?php echo $lang['current_lang'] ? 'is-active':''; ?>">
              <?php if (!empty($lang['flag'])): ?>
                <img src="<?php echo esc_url($lang['flag']); ?>" alt="<?php echo esc_attr($lang['name']); ?>" />
              <?php endif; ?>
              <span><?php echo esc_html($lang['name']); ?></span>
            </a>
          </li>
        <?php endforeach; ?>
      </ul>
    </div>
    <?php
    $injection = '<div class="wp-block-navigation-item lang-switcher">'.ob_get_clean().'</div>';

    // Įdedam į responsive konteinerį (mobile) – kaip ir anksčiau
    $content = preg_replace(
        '/(<div\s+class="wp-block-navigation__responsive-container-content"[^>]*>)/',
        '$1' . $injection,
        $content,
        1
    );

    return $content;
}, 10, 2);

// 2) JS – atidarymas/uždarymas (desktop + mobile)
add_action('wp_footer', function(){
    ?>
    <script>
    (function(){
      function closeAll(){
        document.querySelectorAll('[data-lang-dd] .lang-dd__menu:not([hidden])').forEach(function(m){
          m.setAttribute('hidden','');
          var btn = m.parentElement.querySelector('.lang-dd__btn');
          if (btn) btn.setAttribute('aria-expanded','false');
        });
      }
      document.addEventListener('click', function(e){
        var dd = e.target.closest('[data-lang-dd]');
        var btn = e.target.closest('.lang-dd__btn');
        if (btn && dd){
          var menu = dd.querySelector('.lang-dd__menu');
          var open = !menu.hasAttribute('hidden');
          closeAll();
          if (!open){
            menu.removeAttribute('hidden');
            btn.setAttribute('aria-expanded','true');
          }
        } else if (!dd){
          closeAll();
        }
      });
      document.addEventListener('keydown', function(e){
        if (e.key === 'Escape') closeAll();
      });
    })();
    </script>
    <?php
});

// 3) CSS – tvarkingas vaizdas ir su tema suderinamas
add_action('wp_head', function(){
    ?>
    <style>
      .lang-switcher { display:inline-flex; align-items:center; }
	.lang-dd { position:relative; display:inline-block; }

	.lang-dd__btn{
	  display:flex; align-items:center; gap:.45rem;
	  padding:.38rem .7rem; border-radius:9999px;
	  border:1px solid #d0d7de;
	  background:#fff;
	  font-size:14px; line-height:1.2; cursor:pointer;
	  transition: background-color .15s, border-color .15s, box-shadow .15s;
	}
	.lang-dd__btn:hover{ background:rgba(0,0,0,.03); border-color:#c6ced6; }
	.lang-dd__btn:focus{ outline:0; border-color:#444; box-shadow:0 0 0 3px rgba(2,132,199,.25); }
	.lang-dd__btn img{ height:1em; width:auto; border-radius:2px; }
	.lang-dd__chev{ pointer-events:none; opacity:.7; }

	.lang-dd__menu{
	  position:absolute; top:100%; left:0; margin-top:.3rem;
	  background:#fff;
	  border:1px solid #d0d7de;
	  border-radius:.6rem; min-width:10rem; padding:.25rem;
	  box-shadow:0 8px 24px rgba(0,0,0,.08); list-style:none; z-index:1000;
	}
	.lang-dd__menu li a{
	  display:flex; align-items:center; gap:.5rem;
	  padding:.45rem .55rem; border-radius:.45rem;
	  text-decoration:none; color:#222;
	}
	.lang-dd__menu li a:hover{ background:rgba(0,0,0,.04); }
	.lang-dd__menu img{ height:1em; width:auto; border-radius:2px; }
	.lang-dd__menu .is-active{ font-weight:600; }

	/* Išlyginimas su meniu elementais */
	.wp-block-navigation .lang-switcher { margin-left:.5rem; }

	/* Mobile konteineryje */
	.wp-block-navigation__responsive-container-content .lang-switcher{ display:block; margin:.5rem 0 0; }
	/* Jei nori pilno pločio mygtuko ant mobile, atkomentuok:
	.wp-block-navigation__responsive-container-content .lang-dd__btn{ width:100%; justify-content:space-between; }
	*/
    </style>
    <?php
});