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-sel3developer.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.