the_content에서 빈 단락을 제거 하시겠습니까?


33

안녕하세요, 워드 프레스 게시물에 빈 단락이 생성되는 것을 막고 싶습니다. 콘텐츠 간격을 수동으로 조정하려고 할 때 자주 발생합니다.

왜 이것이 효과가 없는지 모르겠습니까?

/*Remove empty paragraph tags from the_content*/
function removeEmptyParagraphs($content) {

    /*$pattern = "/<p[^>]*><\\/p[^>]*>/";   
    $content = preg_replace($pattern, '', $content);*/
    $content = str_replace("<p></p>","",$content);
    return $content;
}

add_filter('the_content', 'removeEmptyParagraphs');

편집 / 업데이트 :

문제는 다음과 같습니다.

function qanda($content) {

    // filters for [q=some question] and [a=some answer]
    // wraps it inside of <div class="qanda"><div class="question"> </div><div class="answer"> </div></div>
    $content = preg_replace('/\[q=(.+?)].+?\[a=(.+?)]/is', '<div class="qanda"><div class="question">$1</div><div class="answer">$2</div></div>', $content);

    return $content;
}

add_filter('the_content', 'qanda');

내 게시물과 페이지에서 일종의 단축 코드 패턴을 필터링하기 위해이 기능을 직접 수행했습니다. 백엔드에서 게시물이 단락과 불필요한 간격없이 완전히 완료되었지만 결과는 다음과 같습니다.

<div class="entry">

    <p></p>
    <div class="qanda">...</div>
    <p></p>
    <p></p>
    <div class="qanda">...</div>
    <p></p>
    <p></p>
    <div class="qanda">...</div>

</div>

이 빈 p가 어디에서 왔는지 아십니까?



1
wpautop예를 들어 필터를 작동시키기 전에 필터를 실행하십시오 . add_filter('the_content', 'qanda', 7 );..
— t31os

@ t31os : 우리가 그것에 투표 할 수 있도록 귀하의 의견을 답변으로 옮길 수 있습니까?
— Jan Fabry

답변:


20

WordPress는 게시물이나 페이지 내에서 내용 나누기를 분리하는 태그를 자동으로 삽입 <p>하고 </p>태그합니다. 어떤 이유로 든이를 제거하거나 제거해야하는 경우 다음 코드 스 니펫 중 하나를 사용할 수 있습니다.

wpautop 필터를 완전히 비활성화하려면 다음을 사용하십시오.

remove_filter('the_content', 'wpautop');

그래도이 기능을 사용하려면 다음 우선 순위 값을 필터에 추가하십시오.

add_filter('the_content', 'removeEmptyParagraphs',99999);

2
고맙습니다! 워드 프레스가 자동으로 p 태그를 삽입한다는 것을 알고 있습니다. 그러나 내 콘텐츠 어딘가에 빈 <p> </ p> 태그가있는 경우가 있습니다 (일부 도구로 검사 할 때). 많은 게시물을 제거하고 편집 할 때 발생합니다. 내 콘텐츠에 빈 단락을 남기고 싶지 않습니다. 빈 단락이 아닌 단락이 필요합니다. 99999는 차이가 없습니다. 작동하지 않습니다. wpautop 필터는 내가 원하는 것이 아닙니다. 모든 <p> 및 자동 서식을 방지합니다. 나는 단지 빈 p를 원하지 않는다!
— mathiregister

내 게시물을 업데이트하여 내가 무슨 뜻인지 알 수 있습니다! 이미 콘텐츠를 필터링하는 기능을 수행했습니다. 그것은 div를 삽입하고 wordpress가 <p> </ p>를 삽입하기 전후에 삽입하는 것처럼 보입니다. 어떤 아이디어?
— mathiregister

21

나는 당신과 같은 문제가있었습니다. 방금 ... 아름다운 해결책은 아니지만 작동하지만 지금까지는 내가 가진 유일한 해결책입니다. JavaScript 줄을 조금 추가했습니다. jQuery가 필요하지만, 없이도 알아낼 수 있다고 확신합니다.

이것은 내 작은 JS입니다.

$('p:empty').remove();

이것은 나를 위해 작동합니다!


아 그 달콤한 작은 숫자가 아니야! 팁 주셔서 감사합니다-그것은 나를 위해 작동하며 다른 사람이 그것을 사용하는 방법을 궁금해하는 경우 테마의 사용자 정의 JS 파일에 넣으십시오.
— Sol

11
CSS를 사용하여이 작업을 수행 할 수도 있습니다.p:empty { display:none; }

@D_N CSS를 사용하여 빈 단락 태그를 숨기면 작동 <p></p>하지만 작동 하지 않습니다 <p>\n</p>.
— Michael Ecklund

11

나는 이것이 이미 '해결됨'으로 표시되어 있지만 참고 용으로 게시물에 마크 업을 추가하지 않고도 원하는 것을 정확하게 수행하는 함수를 알고 있습니다. 이것을 테마의 functions.php에 넣으십시오.

add_filter('the_content', 'remove_empty_p', 20, 1);
function remove_empty_p($content){
    $content = force_balance_tags($content);
    return preg_replace('#<p>\s*+(<br\s*/*>)?\s*</p>#i', '', $content);
}

이것은이 요지에서 온 것입니다 : https://gist.github.com/1668216


6
force_balance_tags () 사용에 대한 약간의 참고 사항 ... JavaScript가 포함 된 콘텐츠에 사용될 때이 함수로 인해 까다로운 버그가 발생했습니다 (JS는 폼에 ajax를 사용할 때 Gravity Forms에서 나왔습니다). 특정 상황 force_balance_tags에서 <캐릭터를 만날 때 알려진 문제가 있습니다. 자세한 내용은 티켓 [9270] ( core.trac.wordpress.org/ticket/9270 )을 참조하십시오.
— Dave Romsey

Dave가 강조한 것과 동일한 문제가 있습니다. 스 니펫은 내장 YouTube 비디오를 제거했으며 amp 페이지에서도 유효성 검사 문제를 일으켰습니다.
— 마르코 파니 치

11

간단히 CSS를 사용하십시오

p:empty {
  display: none;
}

귀하의 답변에 대한 설명을 추가하십시오
— Pieter Goosen

4
@PieterGoosen 그것은 이미 설명이 필요합니다
— 에 적어도 3 자 이상

간격을두고 표시하지 않으려면 IE9까지 잘 작동합니다. 자세한 내용은 caniuse.com/#feat=css-sel3 및 developer.mozilla.org/en-US/docs/Web/CSS/%3Aempty 를 참조하십시오.
— 윌

1
CSS 선택기 메소드를 사용한 멋진 옵션은 그것이 존재한다는 것을 몰랐습니다. 감사!
— i_a

1
참고 : &nbsp;<p> 태그 안에 있으면 작동하지 않습니다.
— RynoRn

5

불쾌한 wpautop느낌을주기 전에 필터를 실행 하고 마크 업을 망칠 수 있습니다.

add_filter('the_content', 'qanda', 7 );

그런 식으로, 당신은 이미 연결될 때까지 필요한 것을 이미 변환했습니다. 어떤 경우에는 도움이됩니다.


3

그의 대답이 나에게 도움이되지 않았기 때문에 2 전에 대답하는 것과 같은 접근법이지만 업데이트 된 정규식입니다.

정규 표현식 : /<p>(?:\s|&nbsp;)*?<\/p>/i (비 캡처 그룹은 공백이나 &nbsp;p-tag 내에서 s를 찾고 , 대소 문자를 구분하지 않습니다.

add_filter('the_content', function($content) {
    $content = force_balance_tags($content);
    return preg_replace('/<p>(?:\s|&nbsp;)*?<\/p>/i', '', $content);
}, 10, 1);

0

나는 이것이 이상하다는 것을 알았지 만 실제로 호출 the_content()하면 설명하는 방식으로 단락이 삽입됩니다. 기본적으로 입력 한 HTML 코드 (편집시 "HTML보기"와 동일)를 원하는 경우 get_the_content()형식 및 단락 태그없이 내용을 반환하는 을 사용 하십시오.

반환하므로 다음과 같은 것을 사용하십시오.

echo get_the_content ();

참조 : http://codex.wordpress.org/Function_Reference/get_the_content


고마워 그러나 나는 그것을 원하지 않습니다! 나는 정상적인 문단이 필요합니다. 첫 번째는 시맨틱 마크 업이고 두 번째는 예상대로입니다. 나는 이해가되지 않는 빈 단락을 가지고 있지 않습니다! 단순히 해당 단락에 스타일을 적용했기 때문에이 스타일과 함께 빈 단락도 나타나고 페이지가 이상하게 보입니다.
— mathiregister

내 add_filter가 작동하지 않는 이유가 실제로 궁금합니다.
— mathiregister

알았어 시도해 볼만한 한 가지는 HTML에서 시각적으로 전환하고 한두 시간으로 되 돌리는 것입니다. WYSIWYG 편집기가로드되면 빈 단락 태그가 제거된다고 생각합니다.
— cwd

0

이것은 문자열에서 모든 빈 html 태그를 재귀 적으로 제거합니다.

add_filter('the_content', 'remove_empty_tags_recursive', 20, 1);
function remove_empty_tags_recursive ($str, $repto = NULL) {
         $str = force_balance_tags($str);
         //** Return if string not given or empty.
         if (!is_string ($str)
         || trim ($str) == '')
        return $str;

        //** Recursive empty HTML tags.
       return preg_replace (

              //** Pattern written by Junaid Atari.
              '/<([^<\/>]*)>([\s]*?|(?R))<\/\1>/imsU',

             //** Replace with nothing if string empty.
             !is_string ($repto) ? '' : $repto,

            //** Source string
           $str
);}

패턴은 http://codesnap.blogspot.in/2011/04/recursively-remove-empty-html-tags.html 에서 가져옵니다 .


0

<p>콘텐츠에 공백 이있는 태그가 있으면 게시물이나 페이지로 이동하여 시각적 스타일이 아닌 편집으로 이동하십시오.

당신은 &nbsp;거기에서 일부 를 찾을 수 있습니다. 그것을 삭제하면 빈 <p>태그가 사라집니다.


0

없는 HTML 콘텐츠 만 가지려면

태그 우리는 다음 루프를 사용하여 게시물이나 페이지의 형식을 지정하지 않고 html 만 넣을 수 있습니다

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_title(); ?>
<?php echo $post->post_content; ?>
<?php endwhile; endif; ?>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.