web-dev-qa-db-ja.com

Wordコンテンツが投稿コンテンツに<br>タグを自動的に追加しないようにする

WordPressテキストエディタでリターンを追加するときにWordPressが<br>タグを自動的に挿入しないようにする方法はありますか。

コード編集者のように振る舞い、コードを好きなように構成して読みやすくすることができればと思います。

私がエディタで使用しているコードは次のとおりです。

[one_third][team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"][custom_button url="#"]For more information[/custom_button][/team_member][/one_third][one_third][team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"][custom_button url="#"]For more information[/custom_button][/team_member][/one_third][one_third][team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"][custom_button url="#"]For more information[/custom_button][/team_member][/one_third]

読みやすく編集しやすいように、このように構成したいと思います。

[one_third]
[team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"]
[custom_button url="#"]For more information[/custom_button]
[/team_member]
[/one_third]

[one_third]
[team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"]
[custom_button url="#"]For more information[/custom_button]
[/team_member]
[/one_third]

[one_third]
[team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"]
[custom_button url="#"]For more information[/custom_button]
[/team_member]
[/one_third]

しかし、これを行うと、投稿コンテンツに目に見えない<br>タグが追加され、それが私のページのレイアウトをめちゃくちゃにするでしょう。

24
mvaneijgen

Sheaによる回答は、多くの場合のように理想的ではありません。

  • <br>, <p>などからすべてを削除したくない場合は、WPビジュアル作曲家のデフォルトの動作として使用してください。
  • 多くの場合、これはWPのデフォルトのコア動作を変更しているため、「コアをハッキングする」と見なされます。たとえば、このようなことはThemeForestには渡されません。

お分かりのように、あなたは主にあなたとショートコードの問題を抱えています。これにアプローチする正しい方法は、デフォルトの動作を変更すること(コアをハックすること)ではなく、単にコンテンツをフィルタリングすることです。それで、単にフィルタを追加し、変数にあなたが次のようにフィルタしたいあなたのshotrcodeの配列を渡す:

function the_content_filter($content) {
    $block = join("|",array("one_third", "team_member"));
    $rep = preg_replace("/(<p>)?\[($block)(\s[^\]]+)?\](<\/p>|<br \/>)?/","[$2$3]",$content);
    $rep = preg_replace("/(<p>)?\[\/($block)](<\/p>|<br \/>)?/","[/$2]",$rep);
return $rep;
}
add_filter("the_content", "the_content_filter");

内部のコンテンツはフィルタリングされ、それゆえあなたのショートコードは<br>, <p>などから解放されますが、コンテンツの他の部分 - 例えばユーザによって作成されたWPエディタの標準テキスト - は依然としてWPの全機能を持ちます。

参照:

  1. the_content WP filter
  2. 正規表現 "translator"
  3. 結合PHP関数
  4. preg_replace PHP関数
25
Borek

wpautop()関数は、改行を保持するために<p>タグと<br>タグをコンテンツに追加します。これらのタグを自分で追加する場合は、投稿コンテンツにこの機能を適用するフィルタを削除できます。

remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );

もしあなたが自動パラグラフ作成を続け(<p>タグを挿入する)そして追加の<br>タグを単に削除したいのなら、代わりにこのコードを使うことができます:

remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );

function wpse_wpautop_nobr( $content ) {
    return wpautop( $content, false );
}

add_filter( 'the_content', 'wpse_wpautop_nobr' );
add_filter( 'the_excerpt', 'wpse_wpautop_nobr' );

このコードの置き場所がわからない場合は、 このリンク を参照してください。

13
shea

プラグイン「Don't Muck My Markup」をインストールしてください。

各ページにチェックボックスオプションを追加して、<p>および<br>タグの自動挿入を無効にします。

サイト全体でこれを行うためのオプションもあります。

3
Brent Baccala

たぶんそれは混乱を招くテキストエディタです。これは私がしたことです:

私はTinyMCEを使います。テキストエディタの設定で、 "保存時に" <p> "と" <br /> "タグを削除してHTMLエディタに表示する"のチェックを外しました。私のために働きました。

Borekの答えは、生のHTMLを書いている私のユースケースではうまくいきませんでした。

そのために、[html][/html]shortcodeのスニペットを作成するために コードスニペット プラグイン(実行する任意のPHPスニペットを簡単に追加できます)を使用しました。このショートコードの素晴らしいところは、投稿全体への<br>タグと<p>タグの自動挿入を無効にできる toggle-wpautop pluginと互換性があることです。あなたはどちらを使うこともできます、ミックス&マッチ。

function html_shorttag_filter($content) {
  // Based on: https://wordpress.org/plugins/lct-temporary-wpautop-disable-shortcode/
  $new_content = '';
  $pieces = preg_split('/(\[html\].*?\[\/html\])/is', $content, -1, PREG_SPLIT_DELIM_CAPTURE);
  // don't interfere with plugin that disables wpautop on the entire page
  // see: https://plugins.svn.wordpress.org/toggle-wpautop/tags/1.2.2/toggle-wpautop.php
  $autop_disabled = get_post_meta(get_the_ID(), '_lp_disable_wpautop', true);
  foreach ($pieces as $piece) {
    if (preg_match( '/\[html\](.*?)\[\/html\]/is', $piece, $matches)) {
      $new_content .= $matches[1];
    } else {
      $new_content .= $autop_disabled ? $piece : wpautop($piece);
    }
  }
  // remove the wpautop filter, but only do it if the other plugin won't do it for us
  if (!$autop_disabled) {
    remove_filter('the_content', 'wpautop');
    remove_filter('the_excerpt', 'wpautop');
  }
  return $new_content;
}
// idea to use 9 is from: https://plugins.svn.wordpress.org/wpautop-control/trunk/wpautop-control.php
add_filter('the_content', 'html_shorttag_filter', 9);
add_filter('the_excerpt', 'html_shorttag_filter', 9);
0
Greg

この関数は、ショートコードの<p>タグと<br>タグを削除するだけです。

function bnd_fix_shortcodes_extra_line_break( $content ){
  $array = array (
    '<p>['    => '[',
    ']</p>'   => ']',
    ']<br />' => ']'
  );
  $content = strtr( $content, $array );
  return $content;
}
add_filter('the_content', 'bnd_fix_shortcodes_extra_line_break');
0
Burhan Nasir

フィルタを必要とする他のコンテンツがない限り、コンテンツに含まれるものがすべてショートコードであれば、単にdo_shortcode()を使用することもできます。

私は文脈を知らないが、あなたがループに入っているなら:

echo do_shortcode($post->post_content);

0
Simon