Пробел как дополнительный делитель тегов
В wp теги (метки) разделяются запятыми. В wp-includes/post.php (строка 4349) прописано так:
function wp_set_post_terms( $post_id = 0, $tags = '', $taxonomy = 'post_tag', $append = false ) { $post_id = (int) $post_id; if ( ! $post_id ) { return false; } if ( empty( $tags ) ) { $tags = array(); } if ( ! is_array( $tags ) ) { $comma = _x( ',', 'tag delimiter' ); if ( ',' !== $comma ) { $tags = str_replace( $comma, ',', $tags ); } $tags = explode( ',', trim( $tags, " \n\t\r\0\x0B," ) ); }
Но встала задача, делить метки как с запятой, так и с пробелом. Т.е. слова «слово,слово1,слово2» и «слово слово1 слово2» в равной степени каждое слово станет меткой. Сейчас же второй вариант становится одной меткой «слово слово1 слово2».
Решил вопрос добавлением строки «$comma = _x( ',', 'tag delimiter' );», получилось:
function wp_set_post_terms( $post_id = 0, $tags = '', $taxonomy = 'post_tag', $append = false ) { $post_id = (int) $post_id; if ( ! $post_id ) { return false; } if ( empty( $tags ) ) { $tags = array(); } if ( ! is_array( $tags ) ) { $comma = _x( ' ', 'tag delimiter' ); $comma = _x( ',', 'tag delimiter' ); if ( ' ' !== $comma ) { $tags = str_replace( $comma, ' ', $tags ); } $tags = explode( ' ', trim( $tags, " \n\t\r\0\x0B," ) ); }
Вроде как работает, но чувствую, что решение идиотское. Подскажите, пожалуйста, более правильное решение, возможно добавлением какого-нибудь фильтра в functions.php, что было б вообще замечательно.
Нельзя изменять файлы движка. При его обновлении Ваши правки затрутся.
К сожалению, в движке напрямую не предусмотрено, чтобы можно было изменить разделитель, да оно и понятно почему. Вдруг надо ввести метку из 2 слов? У меня часто бывают метки из 2 слов, а то и больше. С разделителем "пробел" этого сделать не удастся.
Но если прям уж сильно хочется, то рассуждаем. В функции используется _x( ',', 'tag delimiter' ) - это функция перевода. Перейдя в неё и глубже по цепочке, можно найти хук gettext_with_context, то есть мы можем переопределить значение. Вот так:
Этот вариант работает только в классическом редакторе. Причем это влияет и на JS в метабоксе. При написании слова и нажатии "пробел" метка автоматически сформируется, как раньше. В блочном редакторе (Гутенберг) я пока не разбирался. Надо также отменить, что невозможно предусмотреть сразу два варианта использования. Тут или запятая, или пробел, или любой другой разделитель. Только один вариант делителя.