ビジュアルモードで記事を書くと全く改行されないテーマについて
-
有料のテーマ(日本製)を購入して、ポータルサイトを構築しているのですが、
ビジュアルモードにて、(固定ページ、投稿ページ共に、)管理画面上で改行しても、公開ページ上では、全く改行されなかった(画面が文字で埋まってしまう)ため、そのテーマの購入元に、テーマのバグなのかどうか質問したところ、brBRbr等のプラグインで対処してください、
との回答をもらいました。
今構築しているポータルサイトは、寄稿者ユーザーからの投稿が公開ページに反映される
ようにするため、ビジュアルモードでユーザーが管理画面上で改行した場合、
公開ページ上でもそれが反映されることが必須です。brBRbrというプラグインは、フォーラムで情報を得ると、
WordPressのコアファイルの改変をするプラグインだから、色々な
問題が起こりうるということを認識しているため、できることなら、brBRbrのプラグインを使うという選択肢以外で対応
したいと思っています。寄稿者ユーザーは、HTMLのことを知らない人がほとんどという前提ですので、
ビジュアルモードで改行したら、それが公開ページで反映されるというように
したいです。brBRbrのプラグインを使う以外の手段を、もし知っている方がいたら、
どうかご教示いただけないでしょうか。
-
テーマによって経験あります。
私は、改行後に半角ドットやコンマを入れて、その文字に色を付けて誤魔化していました。
背景の色に合わすと、余程で無い限りわかりません。荒技ですが、寄稿者ユーザが居るので参考になりませんね。(-_-;)
すみません。nobitaさん
ありがとうございます!
早速、以下のコードをfunctions.phpの先頭の<?phpのあとにコピペし、
style.cssに、Webページに記載があった(hr + br.space,で始まる)スタイルルールをコピペして試してみました。しかしながら、新規に投稿ページをつくって、文章を記入して、改行しても、公開ページ上でなぜか改行されません。。
もし、私のアクションで不適切な部分がありましたら、ご教示いただけますと幸いです。
/* Script Name: Force Break2 Author: Tenman Author URI: http://www.tenman.info/ Version: 0.1 License: GNU General Public License v2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html */ add_filter( 'wp_insert_post_data' , 'filter_handler' , '99999'); function filter_handler( $data){ $pattern = '/( (\s)*)+/'; $data['post_content'] = preg_replace_callback( $pattern, "nbsp2br", $data['post_content']); return $data; } function nbsp2br($matches){ $count = substr_count( $matches[0], ' ' ); return '<br style="line-height:'.$count * 1.5.'" />'."\n\n" ; }
こんにちは
Force Break2 の場合は、スタイルシートの追加は必要ありません。
上記の関数だけで、動作します。
現在環境の違う2サイトだけでしかテストを行っていないので、関数に問題があるかもしれません。以下の件について、解答ご協力いただけると、うれしいです。
この関数が機能しているかどうかを見分ける方法
ソースを見たり、タブをhtmlに切り替えると、連続改行は、以下のようなBR要素に置き換えられます。
<br style="line-height:4.5;" />
(上のスタイルの意味:連続改行は、2個目から&nbsp;にワードプレスが置き換えるので、3個連続していて、それらに、line-height 決めうちで1.5なので、4.5になっています )
Q1.複数改行が行われている場合は、brに変換されているかどうか、確認してください。
Q2.brが見つかった時には、brの前後の文字列がp要素で囲まれているかどうかを、確認して知らせてください
もし、brに変換されてなければ、複数改行した場所のソースをチェックしてください。
Q3.複数改行を行った場合、最初の改行以外は、tinymceが、&nbsp;に置換して保存するのが、通常の動作なので、htmlソースに、&nbsp;(&は半角)があるかどうかをお知らせください。
Q4.出来れば、改行されないコンテンツのソースを確認していただき、ソースに改行が含まれているかどうか、教えてください。
ありがとうございます。
いま、確認いたしました。
Q1-Q4の回答の前に、
基本的な挙動を調べました。
ビジュアルモードで、以下の文を以下の改行数で書きました。
みなさん
こんにちは
←2回改行
わたしは
←3回改行山田太郎です。
(すみません、途中で投稿してしまいました)
そして、HTMLモードを見てみると、
みなさん、
こんにちは、
わたしは
山田太郎です。となっていました。
そして、更新ボタンを押すと、
みなさん、
こんにちは、
<br style=”line-height:1.5″ />
わたしは
<br style=”line-height:3″ />
山田太郎です。と変化しました。
そして、公開ページを見てみると、
みなさん、こんにちは、
わたしは
山田太郎です。となっており、
”みなさん、”と、”こんにちは、”の間は
改行されておらず、
”わたしは”と”山田太郎です”は、
改行されていました。
そして、公開ページから、再度、同じ投稿ページの編集画面に戻って、
HTMLモードを見てみると、みなさん、
こんにちは、
わたしは
山田太郎です。となっており、”わたしは”と”山田太郎です。”の間の
が1つ減っていました。以上から、2回以上改行したら、公開ページ上で改行されている
ことがわかりました。教えていただいたコードは正常に機能しているということでしょうか。
私自身、WordPressの基本的な改行の特性をしっかり理解していないのですが、
ビジュアルモードで、一回だけ改行しても、公開ページでは
改行されないのでは正常なのでしょうか。そうである場合、寄稿者ユーザーに投稿してもらう場合、
公開ページ上で改行したい場合は、2回以上、ビジュアルモード上で改行してもらうようにしてもらわないと
いけないということでしょうか。お手数ですが、ご教示いただければ幸甚です。
なぜか、&nbsp; の表記が上記の投稿で消えてしまいました。。
空欄になっているところは、&nbsp;が入っています。
みなさん、
こんにちは、
&nbsp;
わたしは
&nbsp;
&nbsp;
山田太郎です。↓
みなさん、
こんにちは、
&nbsp;
わたしは
&nbsp;
山田太郎です。こんにちは、
2回以上、ビジュアルモード上で改行してもらうようにしてもらわないと
いけないということでしょうか。スクリプトを使わない状態のビジュアルモードでは、改行を1回することで、一つの段落を形成します(shift+ enterは、段落内改行を形成します)
複数改行を行った場合、2個目の改行以降は、&nbsp;に置換されます。
また、連続する<br />
も、一つに除去されたと思います。Force Break2は、この、&nbsp;の数を数えて、投稿を保存する時に、br要素に、置換します。
”みなさん、”と、”こんにちは、”の間は
改行されておらず、
”わたしは”と”山田太郎です”は、
改行されていました。
本来、ビジュアルモードでは、改行一回で、段落が形成されるのに、なぜ、Force Break2を使うと、改行されなくなってしまうのか、
”みなさん、”と”こんにちは、”がなぜ改行されなくなったのか
<p>みなさん、</p> <p>こんにちは、</p> <br style="line-height:1.5" /> <p>わたしは</p> <br style="line-height:3" /> <p>山田太郎です。</p>
上記のような、ソースを想定していて、WordPressのwpautopという関数が、適切に段落を構成してくれるように、
nbsp2br()
の、returnの所に、改行を二つ追加していますソースで、みなさん こんにちはが、pタグで囲まれているか、そうなっていないか、教えていただけますか?
テーマが、まったく改行しないという問題の一つの要因に、テーマファイルが、pタグで囲む機能を、とめている可能性もあります。
ご利用のテーマの、functions.phpに
以下の ‘wpautop’ という文字列があるかどうか教えてください
例
remove_filter('the_content','wpautop');
但し、これ以外の書き方も出来るので 文字列だけ検索して、その行を書き込んでください
なければ、「なし」だけで、かまいませんので、書き込みお願いします。
ありがとうございます。
とても理解が進みました。pタグについて、HTMLモードで見てみました。
みなさん、
こんにちは、
<br style=”line-height:1.5″ />
わたしは
<br style=”line-height:3″ />
山田太郎です。となっており、pタグが存在していませんでした。
‘wpautop’とい文字列について、
Functions.phpのソースを、すべてワードファイルにコピペして、
検索してみましたが、存在しませんでした。また、remove_filter という文字列は存在しませんでした。
_filterで検索かけたところ、以下のコードがひっかかりました。
add_filter( ‘wp_insert_post_data’ , ‘filter_handler’ , ‘99999’)
add_filter(‘the_content_more_link’, ‘remove_more_jump_link’)
$class_names = join( ‘ ‘, apply_filters( ‘nav_menu_css_class’, array_filter( $classes ), $item ) );
$args->link_before .$prepend.apply_filters( ‘the_title’, $item->title, $item->ID ).$append;
$output .= apply_filters( ‘walker_nav_menu_start_el’, $item_output,
$list_args = apply_filters( ‘wp_page_menu_args’, $list_args );
apply_filters( ‘wp_list_pages_excludes’, $exclude_array ) );
以上、何卒よろしくお願いします。
pタグについて、HTMLモードで見てみました。
みなさん、
こんにちは、
<br style=”line-height:1.5″ />
わたしは
<br style=”line-height:3″ />
山田太郎です。となっており、pタグが存在していませんでした。
pタグが表示されるのは、実際に表示したブログのhtmlソースで確認する必要があります。
もし、「みなさん」がp要素で囲まれていない場合は、
functions.phpに
add_filter('the_content','wpautop');
を追加して、pタグが追加されるかどうか確認してください。
P要素がうまく追加できた時には、テーマ制作会社に、フィルタを追加して問題になる事はないかどうか、確認してください。
P要素が追加できない場合は、なぜ、動作しないのか、テーマ制作会社に、理由を尋ねてみてください。
ありがとうございます。
Functions.phpの先頭に以下のように
add_filter(‘the_content’,’wpautop’);
を追加しました。あと、初歩的な質問ですみませんが、
実際に表示したブログのhtmlソースで確認する
とありますが、どのような手順を踏めば確認することができるのでしょうか。
(今までそれを見たことがないため、すみませんが
ご教示のほどよろしくお願いいたします)<?php /* Script Name: Force Break2 Author: Tenman Author URI: http://www.tenman.info/ Version: 0.1 License: GNU General Public License v2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html */ add_filter( 'wp_insert_post_data' , 'filter_handler' , '99999'); add_filter('the_content','wpautop'); function filter_handler( $data){ $pattern = '/( (\s)*)+/'; $data['post_content'] = preg_replace_callback( $pattern, "nbsp2br", $data['post_content']); return $data; } function nbsp2br($matches){ $count = substr_count( $matches[0], ' ' ); return '<br style="line-height:'.$count * 1.5.'" />'."\n\n" ; }
連続した改行を付けた投稿を 保存します
投稿を表示というリンクが、黄色いボックスの中に表示されるので、クリックして表示
投稿が表示されたら、右クリックして「ソースを表示」をクリックします。
連続した投稿のところを見つけて、その部分をここに書き込んでください。
ありがとうございます。
以下のようになっていました。<div class="post clearfix"> みなさん こんにちは! <br style="line-height:1.5" /> わたしは <br style="line-height:3" /> 山田太郎です<p>No related posts.</p></div><!-- /.clearfix -->
やはり、P要素を何らかの理由で、外しているようです。
今のテーマに無理やり対応すると、wpautop関数を付け直すか、改行をbrに置換するフィルタを使うという事になると思います。
どちらがいいか、影響などはテーマがないので判断できません
add_filter('the_content','wpautop');
の一行を外して、以下を追加してみてください。
問題が出るようなら returnのコメントアウトを入れ替えて試してみてください。
add_filter( 'the_content', 'add_paragraph' , '99999' ); function add_paragraph( $content ){ //したのどちらかを使うと、いいかも //return str_replace( PHP_EOL.PHP_EOL, '<br />', $content ); return wpautop( $content ); }
以上で、改行一回でも、何らかの形で、改行でき、2回以上改行を続けると、それなりの行間になると思います。
- トピック「ビジュアルモードで記事を書くと全く改行されないテーマについて」には新たに返信することはできません。