programing

태그 설명이 필요한 방법

css3 2023. 7. 4. 22:03

태그 설명이 필요한 방법

워드프레스는 처음이지만, 기본적으로 제가 달성하고자 하는 것은 워드프레스 4.5.2의 사용자 정의 테마에 대한 태그 설명을 필수 필드로 만드는 것입니다.

저는 세 가지 접근법을 시도했지만 모두 실패했기 때문에 워드프레스 전문가가 저를 안내해 주시면 감사하겠습니다.

접근법 #1

기능들.php

저는 후크를 '편집'하려고 노력했습니다.edit_tag_form_fields그리고.add_tag_form후크를 호출한 다음 Javascript를 통해 수정합니다.

function require_category_description(){
    require_once('includes/require_category_description.php');
}
add_action('edit_tag_form_fields', 'require_category_description');
add_action('add_tag_form', 'require_category_description');

require_description_description.php

<script>
    jQuery(document).ready(function(){
        var description = jQuery('#tag-description');
        if(!description) description = jQuery('#description');

        if(description){
            description.parents('form').submit(function(){
                if(description.val().trim().length < 1){
                    console.log('Please enter a description...');
                    return false;
                }
            });
        }
    });
</script>

작동하지 않았고, 설명 필드가 비어 있음에도 불구하고 양식이 제출 중이었으며, 무엇보다 이벤트 수신기 내부의 console.log가 발생하지 않았습니다.if 케이스 안에 들어가는지 확인하기 위해 설명 변수를 기록하려고 했습니다.따라서, 저는 양식이 제출된 적이 없으며, 전체 '제출'은 버튼 클릭으로 Ajax를 통해 수행된다고 가정했습니다.

접근법 #2

functions.php접근법 #1과 동일하게 유지되지만 양식 제출 이벤트 대신 버튼 클릭 이벤트를 대상으로 하기 위해 Javascript를 현명하게 변경했습니다.

require_description_description.php

<script>
    jQuery(document).ready(function(){
        var description = jQuery('#tag-description');
        if(!description) description = jQuery('#description');

        if(description){
            var button = description.parents('form').find('#submit');

            button.on('click', function(e){
                if(description.val().trim().length < 1)
                    console.log('Please enter a description...');

                e.preventDefault();
                return false;
            });
        }
    });
</script>

그러나 양식은 여전히 제출 중이지만, 이번에는 콘솔 로그 메시지가 표시됩니다.

설명을 입력하십시오...

제 이론은 WordPress가 이벤트 전에 버튼 클릭에 이벤트를 바인딩하기 때문에 사용자 지정 클릭 이벤트로 이동하기 전에 Ajax와 함께 기본 제공 이벤트를 처리한다는 것입니다.

접근법 #3

require_description_description.php

클릭 이벤트를 추가하기 전에 단추에서 클릭 이벤트의 바인딩을 해제하려고 했습니다.

<script>
    jQuery(document).ready(function(){
        var description = jQuery('#tag-description');
        if(!description) description = jQuery('#description');

        if(description){
            var button = description.parents('form').find('#submit');
            button.unbind('click');

            button.on('click', function(e){
                if(description.val().trim().length < 1)
                    console.log('Please enter a description...');

                e.preventDefault();
                return false;
            });
        }
    });
</script>

결과는 접근법 #2와 동일합니다.양식이 아직 제출 중이지만 콘솔 로그 메시지가 나타납니다.

태그 편집:

태그를 편집할 때 WordPress 호출을 합니다. 하지만 필터나 AJAX 호출이 없기 때문에 우리는 이 호출을 사용해야 합니다.wp_update_term():

add_filter('get_post_tag', function($term, $tax)
{
    if ( isset($_POST['description']) && empty($_POST['description']) ) {
        return new \WP_Error('empty_term_name', __('Tag description cannot be empty!', 'text-domain'));
    } else {
        return $term;
    }
}, -1, 2);

또한 오류를 해결하기 위해 업데이트해야 합니다.

add_filter('term_updated_messages', function($messages)
{
    $messages['post_tag'][5] = sprintf('<span style="color:#dc3232">%s</span>', __('Tag description cannot be empty!', 'text-domain'));
    return $messages;
});

WordPress가 알림 메시지를 하드코딩했기 때문입니다. div저는 인라인 css를 사용하여 오류를 경고처럼 만들었습니다.원하는 대로 변경합니다.


태그 추가:

AJAX에서 전화를 요청해서 우리가 사용할 수 있습니다.pre_insert_term필터를 씌우기이것을 사용해 보십시오.functions.php

add_filter('pre_insert_term', function($term, $tax)
{
    if ( ('post_tag' === $tax) && isset($_POST['description']) && empty($_POST['description']) ) {
        return new \WP_Error('empty_term_name', __('Tag description cannot be empty!', 'text-domain'));
    } else {
        return $term;
    }
}, -1, 2);

여기서 나는 내장된 것을 사용했습니다.empty_term_name알림 메시지를 표시하는 데 오류가 발생했지만 사용자가 직접 등록해야 합니다.

또한, 우리가 무엇을 하고 있는지 완전히 이해하기 위해 살펴보세요.

데모:

enter image description here

은 아약스에게 할 수 submit이벤트, 여기 해결 방법이 있습니다.

당신이 원하는 것은 다음을 포함하는 것입니다.form-required요소의 . 그들의 특정요소부태지클만정지하를래스다, 킥있습니이여에기의모그로.validateForm에 한해서만 확인합니다.input가 태그음에 .textarea그래서 저는 아이디어를 구현했습니다. 효과가 있습니다.

사용해 보세요.

function put_admin_script() { ?>
<script>

    jQuery(document).ready(function(){
        var description = jQuery('#tag-description');
        if( !description ) { 
            description = jQuery('#description'); 
        }   
        if( description ) {
            description.after( $('<p style="visibility:hidden;" class="form-field form-required term-description-wrap"><input type="text" id="hidden-tag-desc" aria-required="true" value="" /></p>') );    
        }   
        description.keyup(function(){
            $("#hidden-tag-desc").val( $(this).val() ); 
        });

        jQuery("#addtag #submit").click(function(){
            console.log("Not empty"+description.val().trim().length);
            if( description.val().trim().length < 1 ) {
                description.css( "border", "solid 1px #dc3232" );
            } else {
                description.css( "border", "solid 1px #dddddd" );
            }                   
        }); 
    }); 

</script>
<?php 
}
add_action('admin_footer','put_admin_script');

언급URL : https://stackoverflow.com/questions/37352539/how-to-make-a-tag-description-required