Intereting Posts
Заказывать сообщения с настраиваемым полем, но также без документация для ключевого слова wordpress 3.7 API настроек – генерирование значения поля на основе другого поля? использование перезаписи для защиты страницы входа в систему Получить текущее сообщение с идентификатором изображения Форматирование массива фигурных скобок из базы данных WP для получения более читаемого результата Добавить метку в редактор? Как удалить автор (ы) из определенных должностей Разрешены ли ссылки в разделе Уведомление об обновлении файла readme.txt плагина? Отображать сообщение, если сообщения не существуют в цикле Является ли это правильным способом переключения ссылки «Изменить мой профиль» на мою ссылку «Расширенный профиль» BuddyPress? Могу ли я настроить сеанс в пользовательской странице WordPress? прикреплять непривязанные избранные изображения к соответствующим сообщениям как изменить мою дочернюю тему? Как изменить / изменить the_post_thumbnail (); html-выход?

Крюк для обработки нового таксономического тега перед его созданием?

Я работаю на веб-сайте, где есть обычная таксономия для мест, которые могут быть городами или штатами. Пользователи должны помечать каждый пост городом и государством. Чтобы иметь дело с неоднозначными городами с одинаковым именем в нескольких штатах, эти теги города имеют название штата (например, «Miami, Florida» имеет название «Miami Florida» и «Miami, Ohio» имеет название «Miami Ohio»).

Пользователи не смогли освоить эту систему, несмотря на автозаполнение, и продолжать вводить «Майами, Флорида», которая создает новый тег «Майами» вместе с существующим тегом Флориды.

Я хотел бы перехватить вход пользователя, когда сообщение будет сохранено, и будет создан новый тег, чтобы увидеть, существует ли комбинация состояния города (т. Е. Если один тег – Майами, а другой – Флорида, Майами Флорида "уже существует). Затем я хотел бы заблокировать создание нового тега и вместо этого применить существующий тег к сообщению.

Какой бы крючок я использовал, и как бы я мог изменить теги в сообщении?

Solutions Collecting From Web of "Крюк для обработки нового таксономического тега перед его созданием?"

Созданный вами крюк created_{$taxonomy} но есть еще одна проблема. Я думаю, что самым большим недостатком логики является то, что оба государства и города находятся в одной таксономии. Вы никогда не сможете отличить два термина (который является городом и который является государством). Это позволяет пользователю выполнить некоторые из следующих действий, все из которых неверны.

  • Введите город без какого-либо состояния
  • Введите состояние без города
  • Состояние или город Миспелл

Я думаю, что решение здесь состоит в том, чтобы разбить государства и города на две разные таксономии. tax_states и tag_cities . Это гарантирует, что каждое сообщение имеет состояние, и каждый городской тег имеет префикс состояния. Я собираюсь начать приведенный ниже код с предположения о регистрации двух таксономий.

Во-первых, давайте добавим некоторый jQuery, чтобы убедиться, что состояние установлено – вы можете захотеть рассмотреть его, но поскольку это небольшой скрипт, возможно, нет:

 function post_type_custom_script() { global $post_type; if( 'post' === $post_type ) { ?> <script type="text/javascript"> /* Checks if cat is selected when publish button is clicked */ jQuery( '#submitdiv' ).on( 'click', '#publish', function( e ) { var $checked = jQuery( '#category-all li input:checked' ); //Checks if cat is selected if( $checked.length <= 0 ) { alert( "Please select a State" ); return false; } else { return true; } } ); </script> <?php } } add_action( 'admin_footer', 'post_type_custom_script' ); 

Самая большая проблема с вышеупомянутым сценарием заключается в том, что он предполагает, что ваша таксономия является иерархической (флажки), но поскольку в теории должно быть выбрано только одно состояние, ни таксономия не является оптимальным выбором. Вместо этого вы можете создать список избранных терминов и использовать save_post чтобы сохранить этот термин или (что я хотел бы предложить) изменить иерархические флажки на Radio Buttons ( PHP Class , Radio Buttons for Taxonomies Plugin ).

Теперь у нас должна быть систематическая таксономия для государств, которую необходимо выбрать для публикации, а также поле для тегов для городов. Следующим шагом является добавление состояния к тегу города всякий раз, когда оно опубликовано. Это сложный список условных выражений, поэтому я добавил комментарии там, где это необходимо. Если каким-то образом состояние не выбрано, мы превращаем сообщение в черновик в качестве последнего результата:

 /** * This function runs whenever a post is saved * * @param Int $post_id * * @return void */ function state_appended_tags( $post_id ) { global $post; if( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) || ( ! current_user_can( 'edit_post', $post_id ) || ! is_object( $post ) ) ) { return $post_id; } if( 'post' === $post->post_type ) { $state = false; $set_draft = false; if( isset( $_POST['tax_input'] ) && ! empty( $_POST['tax_input'] ) ) { // Grab State // If using the Radio Buttons Plugin linked above, use this conditional // if( isset( $_POST['radio_tax_input']['tax_states'] ) && ! empty( $_POST['radio_tax_input']['tax_states'] ) && 0 !== $_POST['radio_tax_input']['tax_states'][0] ) { // $state_obj = get_term_by( 'id', $_POST['radio_tax_input']['tax_states'][0], 'tax_states' ); // Grab Term Object // $state_slug = $state_obj->slug; if( isset( $_POST['tax_input']['tax_states'] ) && ! empty( $_POST['tax_input']['tax_states'] ) && 0 !== $_POST['tax_input']['tax_states'][0] ) { $state_obj = get_term_by( 'id', $_POST['tax_input']['tax_states'][0], 'tax_states' ); // Grab Term Object $state_slug = $state_obj->slug; } else { $set_draft = true; } // Prefix Cities if( ! empty( $state_slug ) && isset( $_POST['tax_input']['tag_cities'] ) && ! empty( $_POST['tax_input']['tag_cities'] ) ) { $new_tags = array(); foreach( $_POST['tax_input']['tag_cities'] as $city ) { $city_obj = false; $city_slug = ''; // Post tags come in two forms - slugs and integers if( is_numeric( $city ) ) { $city_obj = get_term_by( 'id', $city, 'tag_cities' ); // Grab Term Object $city_slug = $city_obj->slug; } else { $city_obj = get_term_by( 'slug', $city, 'tag_cities' ); // Grab Term Object $city_slug = $city_obj->slug; } // If user has already entered the correct state-city formatted tag, skip it // Otherwise we'll enter the conditional if( 0 !== strcmp( "{$state_slug}-{$city_slug}", $city_slug ) ) { $new_tags[] = "{$state_slug}-{$city_slug}"; wp_delete_term( $city_obj->term_id, 'tag_cities' ); // Delete Term } } // Set New State Appended Tags if( ! empty( $new_tags ) ) { wp_set_object_terms( $post_id, $new_tags, 'tag_cities', false ); } } } else { $set_draft = true; } // Finally, should something have failed, don't publish the post and investigate if( $set_draft ) { remove_action( 'save_post', 'state_appended_tags' ); wp_update_post( array( 'ID' => $post_id, 'post_status' => 'draft', ) ); add_action( 'save_post', 'state_appended_tags' ); } } } add_action( 'save_post', 'state_appended_tags' ); 

Вам нужно будет отключить tag_cities и tax_states с вашими фактическими таксономиями, но это должно сработать для вас.