web-dev-qa-db-ja.com

WordPress Importerで、多次元配列を含むpost metaをインポートできないのですが、その配列の値に改行が含まれるのですか?

質問

WordPress Importer で、多次元配列を含むpost metaをインポートできないのですが、その配列の値に改行が含まれるのですか?

データが機能するようにデータを保存するために実行できる回避策はありますか?データをpost metaに保存する前に、データのフォーマットを変更するために衛生処理でできることはありますか?

背景情報

私はレイアウトビルダーを提供するWordPressプラグインを作成しました。ユーザーは、特定の「要素」(スライダー、列のセット、コンテンツ入力など)を指定してカスタムレイアウトのコンテンツを作成し、そのカスタムレイアウトを自分のサイトの静的ページに適用できます。

当初、私の目標はWordPressのインポート/エクスポートツールを使ってすべてのカスタムレイアウトを機能させることでした。したがって、各カスタムレイアウトは実際にはカスタム投稿タイプの投稿であり、それぞれの "要素"のセットはその投稿に対する投稿メタとして保存されます。

それで、本質的に私はこれをカスタム投稿へのカスタムフィールドとしてカスタムレイアウトであるすべての「要素」でこのsingle多次元配列を保存します。

問題

カスタムレイアウトの「要素」に改行付きのユーザー入力テキストが含まれている場合、その投稿メタは[ツール]> [インポート]> [WordPress]を介してインポートされません。その結果、カスタム投稿(カスタムレイアウト)はインポートされますが、要素の投稿メタは空になります。したがって、ユーザーには要素のない空白のレイアウトが見えます。

したがって、この最初の例では改行はなく、workとなります。

しかし、この2番目の例では、ユーザーは改行を入れているため、は動作しません上記の問題が発生します。

可能な解決策?

サンプルレイアウトをすばやくインポートできるように、サンプルコンテンツをユーザー用に設定してWordPressインポートファイルを提供できるようにしたいです。

だから、私はこれを避けるために何かができるかどうかを把握しようとしている?自分のサニタイズ処理の中で、ポストメタに保存する前にデータのフォーマットを変更することは可能ですか?明らかに私はすべての空白を取り除いたほうがいいでしょう、しかしそれからユーザーはレイアウトビルダーのオプションの中で彼らのテキストをフォーマットすることができないでしょう。

4
Jason

あなたの問題は\r\n(CRLF)の問題であると私は考えています。改行がWindowsで作成されている場合、それらは\r\nとしてデータベースに入り、シリアル化されると2文字としてカウントされます。インポートすると、それらは1文字としてカウントされ、文字列を壊します。この仮説を検証したところ、破損したシリアル化された文字列を作成できたことを十分に確認できました。

これがあなたの問題である場合、解決策は投稿メタを保存するときに"\r\n""\n"に置き換えることでしょう。これはロングショットですが、他に何がこの動作を引き起こす可能性があるのか​​私は考えることができません。撮影して、それがどのように機能するかを教えてください。

4
Matthew Boynes