HowTo: Добавить обертку в короткий заголовок столбцов?

У меня простой короткий код. (Как) можно ли это настроить для вывода содержащего div вокруг нескольких столбцов?

На самом деле не хотят вставлять короткие коды в интерфейс. Может быть, какой-то фильтр?

Мои functions.php выглядят так:

 // Columns shortcode function abc_custom_column( $atts, $content = null ) { return '<div class="column">' . do_shortcode( $content ) . '</div>'; } add_shortcode('col', 'abc_custom_column'); 

Надеюсь на что-то вроде:

 if ( 'col' === >2 ) { return '<div class="multi_columns">' . do_shortcode( $content ) . '</div>'; } else { return '<div class="column">' . do_shortcode( $content ) . '</div>'; } 

*** Я знаю, что явно не работает / недействителен код.

Solutions Collecting From Web of "HowTo: Добавить обертку в короткий заголовок столбцов?"

Если все, что вы хотите сделать, – подсчитать, сколько раз короткий код существует в контенте, тогда вы можете использовать substr_count в исходном содержимом, прежде чем он будет разбираться для вывода коротких кодов следующим образом:

 $count = substr_count( get_the_content(), '[col]' ); 

Но вложенные короткие коды, скорее всего, являются лучшим решением, если вы точно не знаете тип контента, добавляемого к сообщению / странице.

Таким образом, ваш полный код будет выглядеть так:

 // Get the content $content = get_the_content(); // Get number of col shortcodes added to the content $count = substr_count( $content, '[col]' ); // Output content if ( $count > 1 ) { return '<div class="multi_columns">' . do_shortcode( $content ) . '</div>'; } else { return '<div class="column">' . do_shortcode( $content ) . '</div>'; } 

Но я не вижу причин избегать использования вложенных столбцов. Особенно, если это касается клиентского сайта или элемента для воспроизведения, если когда-нибудь они захотят изменить способ работы сайта, это может потенциально вызвать проблемы – кажется, что вы хотите, чтобы что-то работало, ожидается, что только столбцы будут добавлены к сообщению (но возможно, это то, что вы хотите?). В этом случае вам может быть лучше не использовать короткие кодовые слова и вместо этого использовать повторяющееся мета-поле, такое как это: https://www.advancedcustomfields.com/add-ons/repeater-field/

Каждый раз, когда вам кажется, что вам нужен короткий код для вставки HTML-тега, вы должны спросить себя, что вы делаете неправильно. В этом случае вы можете легко перейти на вкладку «текст» и добавить div.

Общая проблема, с которой вы сталкиваетесь, заключается в том, что html и редактор поддерживают главным образом поток сверху вниз. Трудно заставить редактора поддерживать какой-либо другой поток, не достигнув состояния, эквивалентного тому, что у него есть сортировщик страниц, то, что никто не должен принуждать использовать;)

Ключом к решению является обращение с каждой областью содержимого как к другому контенту. Подумайте, например, о том, как работают виджеты – их содержимое отображается на странице, но оно не редактируется с помощью редактора.

Таким образом, проблема может быть сведена к тому, как редактировать несколько областей содержимого на одном экране редактирования и как «организовать» его в главном сообщении. Возможно, у вас может быть только другая должность, которая содержит этот контент, или вы можете добавить мета с редактором (вызов wp_editor ) и назначить каждому фрагменту контента определенное идентифицирующее имя. Теперь все, что осталось, это иметь короткий код «многоколоночного», дать ему идентификаторы фрагментов контента в качестве атрибутов и создать любой сложный HTML-код, который вам нужен.

Недостаток этого подхода очевиден, так как он приводит к меньшему количеству изменений в WYSIWYG (хотя, если у WordPress была какая-либо внешняя структура редактирования, она бы легко смягчила эту проблему), преимущество состоит в том, что много раз такие столбцы семантически изолированы , и такая структура редактирования помогает обеспечить ее соблюдение.

Хммммм, вы говорите, что ваши столбцы не семантически изолированы? возможно (и я говорю это очень тихо), что вам нужно, просто использовать таблицу?