web-dev-qa-db-ja.com

Wordpressは<p>タグを削除しますか?

私はすでにWordpressが<p>タグを追加したケースに出くわしたでしょう。しかし今、私は反対の状況を扱っています。 <p>タグ内に[]ショートコードを追加すると、WordPressは自動的に<p>タグを削除します。

<p>[anyshortcode]Hello World[/anyshortcode]</p>

になります:

Hello World

<p>タグにdir = "ltr"を追加すると問題が解決するようですが、すべての<p>タグにプログラムで追加する方法はあるでしょうか。

これを修正する方法についての任意のアイデア?

4

これはFoxsk8がコメントで述べたものとほとんど同じです、従って信用は彼に行くべきですが、これらの追加の指示は役に立つでしょう。 TinyMCE Advanced というWordPressプラグインがあなたの問題を解決します。

このプラグインは、消えているSettings > TinyMCE Advancedタグを修正するオプションを<p>内に持っています。 Stop removing the <p> and <br /> tags when saving and show them in the Text editorというラベルの付いたチェックボックスをオンにすると、<p>タグはそのまま残ります。

4
E. Serrano

TinyMCEは編集を容易にするようにプログラムされています(HTMLに精通していることは多くの場合そうではありません)。デフォルトでは[BLOCKS]の周りの<p>タグ付けを受け入れてはいけません。これは、 "[]"がWPだけでなくPHPベースのCMSでもショートコードに使用されているためです。ショートコードには適切なコンテンツラッパーが必要です。

解決策は、コンテンツが希望どおりに折り返されるように、ショートコードコードに<p>タグを追加することです。

1
STing

あなたのfunction.phpファイルに以下のコードを追加することができます

function content_formatter($content){

    $new_content = '';
    $pattern_full = '{(\[raw\].*?\[/raw\])}is';
    $pattern_contents = '{\[raw\](.*?)\[/raw\]}is';
    $pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);

    foreach ($pieces as $piece) {
            if (preg_match($pattern_contents, $piece, $matches)) {
                    $new_content .= $matches[1];
            } else {
                    $new_content .= wptexturize(wpautop($piece));
            }
    }

    $array = array(
            '<p>[' => '[',
            ']</p>' => ']',
            ']<br />' => ']'
    );

    $new_content = strtr($new_content, $array);

    return $new_content;

}

さて、この関数を必要なときにいつでも呼び出してください。

<?php echo content_formatter( get_field('field_name') ); ?>
0
Mrudang Shah