あ、すいません
もう最初の質問の文字列は表示されていないんですね!
その解決策を考えていました。
今のところエディタには謎の文字列は表示されるものの、投稿したらサイトの記事そのものにはとくにおかしな様子はない、ということでよろしいでしょうか?
すいません
こちらが上手く伝えられていなかったです。
最初の質問の文字列は公開した時に、投稿に追加されて、
サイト上に表示されています。
記事を貼り付けた時は問題ないのですが、
実際に公開した後に記事を見てみると、
謎の文字列が追加されているという感じです。
そのため、投稿した時に、サイトの記事そのものに
最初の文字列が表示されている、という感じです。
サンプルのコードを貼りますが、このコードは記事の保存時に投稿内容を整形するので文字装飾が削除されたり、必要なタグまで消されてしまう可能性があるので気をつけてください。
上のほうで書いてあったテキストエディタに切り替えた時に表示された謎の文字列から本文に関わる部分以外を削除します。
function post_mso_fix($postID) {
global $wpdb;
$content = $wpdb -> get_var("SELECT post_content FROM {$wpdb->posts} WHERE ID = '{$postID}' LIMIT 1");
$content = preg_replace("/\sstyle=\".*?\"|<!--\[if\sgte.*?endif\]-->|<style>.*?<\/style>|<p>\s<\/p>/s", "", $content);
$wpdb -> query("UPDATE {$wpdb->posts} SET post_content = '{$content}' WHERE ID = '{$postID}'");
return $postID;
}
add_action('save_post', 'post_mso_fix');
add_action('edit_post', 'post_mso_fix');
add_action('publish_post', 'post_mso_fix');
記事を保存した段階で整形されるので投稿したら謎の文字列がでるということはなくなると思うんですが・・・。
このコードでやってることは<!–[if gte mso ●]>から<![endif]–>で囲まれた部分とspanタグなどについたstyle属性、不必要な空白文字を削除します。
spanタグやpタグ、見出しなどは残るはずです。
削除のタイミングは保存時なので貼り付けてすぐは謎の文字列はでてきます。
なぜfirefoxでそうなるのかって部分は全然解決してないですけどね(´-ω-`)
上記のコードを貼り付けてみましたが、やはりダメでした。
貼り付けた時には問題が特にないのですが、
公開を実際にすると、変な文章が勝手に追加され、表示されてしまっています。
paruchanさんが作成して下さっているように、
コードで対応のが理想だと考えているので
tinymceで素直にwordの貼り付けをお世話になる方法もあるのかもしれませんが、
もう少し対策を調べてみたいと思います。
うーん。ダメでしたか。
保存するタイミングより先に書き換えが起こってるみたいですね。
function mso_fix_content($content) {
$content = preg_replace("/Normal.*;}/s", "", $content);
return $content;
}
add_filter('the_content', 'mso_fix_content');
このコードは最初の質問ででていた変な文章の最初にある『Normal』という単語から最後にある『;}』という記号までを表示させないというコードになっています。
記事にそのままNormal 0 0 なんとかかんとかと書かれてるのであればこれで表示されなくなるはずなんですよね・・・。
記事を貼り付け→公開したら変な文章が表示されるのはわかったのですが、
その公開した記事ををもう一度テキストエディタで開いたらどうなっていますか?
上のほうの書き込みにあった「お試しで貼り付け」のときのような大量の文字が入ってるでしょうか?
それとも公開したときに勝手についてくる変な文章だけでしょうか?
上記のコードを貼りつけたところ、
公開ボタンを押した後の投稿画面の記事には、「変な文章」が
記載されていましたが、
サイト上の表示では、「変な文章」が見えない状態になっていました。
記事にそのままNormal 0 0 なんとかと書かれているので、
実際に表示されなくなりました。
公開した記事をテキストエディタで開いたら、
以下のようになっていました。
(wordで「お試し」と記述したものをコピーして貼り付けて、
投稿した後の、テキストエディタの内容を全て以下に記述しました。)
<!--[if gte mso 9]>-->
Normal
0
0
2
false
false
false
EN-US
JA
X-NONE
<!--[if gte mso 9]>-->
<!--[if gte mso 10]>-->
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:標準の表;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0mm 5.4pt 0mm 5.4pt;
mso-para-margin:0mm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Century","serif";
mso-ascii-font-family:Century;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Century;
mso-hansi-theme-font:minor-latin;
mso-font-kerning:1.0pt;}
<p class="MsoNormal"><span style="font-family: 'MS 明朝','serif';">お試し</span></p>
投稿画面での記事にはどうしても記載されてしまうようです。
投稿画面での記事にはどうしても記載されてしまうようです。
先にかいたコードは表示されないようにするためのコードですので挙動としてはそれでOKです。
function post_mso_fix($postID) {
global $wpdb;
$content = $wpdb -> get_var("SELECT post_content FROM {$wpdb->posts} WHERE ID = '{$postID}' LIMIT 1");
if (preg_match("/\[endif\]/s", $content)) {
$content = preg_replace("/\sstyle=\".*?\"|<!--\[if\sgte\smso.*?endif\]-->|<p>\s<\/p>/s", "", $content);
$wpdb -> query("UPDATE {$wpdb->posts} SET post_content = '{$content}' WHERE ID = '{$postID}'");
return $postID;
} elseif (preg_match("/if\sgte\smso/s", $content)) {
$content = preg_replace("/\sstyle=\".*?\"|<!--\[if gte mso 9\]>-->.*?<!--\[if gte mso 9\]>-->|<!--\[if gte mso 10\]>-->|\/\*.*?;}/s", "", $content);
$wpdb -> query("UPDATE {$wpdb->posts} SET post_content = '{$content}' WHERE ID = '{$postID}'");
return $postID;
}
}
add_action('save_post', 'post_mso_fix');
add_action('edit_post', 'post_mso_fix');
add_action('publish_post', 'post_mso_fix');
記事から不要箇所を削除するコードです。保存時に機能します。
不要箇所が毎回同じパターンであるとは限らないので万能ではないです。
ワードプレスのコードで対応するのはこのへんが限界かと思います。
上記のコードを貼り付けてみたところ、
記事から謎の文章の部分は削除されませんでした。
万能ではない、ということでしたので、
何度かためしてみましたが、やはり同じ結果でした。
私も引き続き調べていますが、
ワードプレスのコードで対応するのは、
paruchanさんが書いてくださっているコード
くらいまで対応できれば、と考えており、
また、そのようなコードも見つけられていない、
という状況です。