Я пытаюсь получить больше согласованной сетки в моем цикле магазина.
Заголовок продукта охватывает более 1 или 2 строк в зависимости от длины строки, поэтому, если длина строки меньше суммы, которая заставляет ее перекрываться со следующей строкой, я хочу добавить разрыв '
', чтобы он не влиял на общий интервал страницы магазина /
Это код, который я пробовал в данный момент:
<?php echo "test"; $title = get_the_title(); if ( strlen($title) < 29 ) { echo '<br>'; } ?>
Я разместил его в шаблоне woocommerce content-product.php, но он не работает .
Правильно ли мой код?
Любая помощь будет принята с благодарностью.
благодаря
Этот ответ основан на «длине названия» «длина слова», чтобы не сломать слово.
Эта функция частично основана на этом ответе и на woocommerce_template_loop_product_title()
встроенной функции WooCommerce, которая используется на шаблоне WooCommerce content-product.php , чтобы отобразить заголовок на страницах Shop.
Здесь я включил вашу длину строки ограничения , но она также основана на сложной «длине слов» , чтобы избежать разрыва слов:
if ( ! function_exists( 'woocommerce_template_loop_product_title' ) ) { // Show the product title in the product loop. By default this is an <h3> html tag. function woocommerce_template_loop_product_title() { // Define the lenght limit for title (by line) $limit = 29; $title = get_the_title(); $lenght = strlen($title); // 1. The title length is higher than limit if ( $lenght >= $limit ) { $title_arr1 = array(); $title_arr2 = array(); $sum_length_words = -1; // an array of the words of the title $title_word_arr = explode( ' ', $title ); // iterate each word in the title foreach( $title_word_arr as $word ){ // Length of current word (+1 space) $length_word = strlen($word) + 1; // Adding the current word lenght to total words lenght $sum_length_words += $length_word; // Separating title in 2 arrays of words depending on lenght limit if ( $sum_length_words <= $limit ) $title_arr1[] .= $word; else $title_arr2[] .= $word; } // Converting each array in a string $splitted_title = implode(" ", $title_arr1). ' ('. strlen(implode(" ", $title_arr1)) .')'; $splitted_title .= '<br>'; // adding <br> between the 2 string $splitted_title .= implode(" ", $title_arr2). ' ('. strlen(implode(" ", $title_arr2)) .')'; echo '<h3>' . $splitted_title . '</h3>'; // 2. The title length is NOT higher than limit } else { echo '<h3>' . $title . '</h3>'; } } }
Этот код находится в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.
Этот код проверен и работает.
Я думаю, что это не совсем правильно, чтобы
тег между заголовком продукта. Я думаю, вам просто нужно исправить количество символов, используемых в названии вашего продукта, для отображения на странице продукта, например, если название продукта похоже на «Test Bank for Medical Terminology: Living Language, 5 / E», в этом случае вы можете ограничить название «Испытательный банк медицинской терминологии …» в зависимости от вашего макета
так что таким образом ваш макет останется таким же и хорошим
Что я предлагаю использовать следующие
h1{ height: 40px; width: 250px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;}
<h1>Sample test test test test</h1>