0

css ファイルに動的に書き込もうとしています。ファイルには既にいくつかのコンテンツが含まれており、動的に生成された css ルールをファイルの末尾に追加する必要があります。

ただし、FILE_APPENDフラグを使用すると、コードは常にファイルを上書きして以前のデータをすべて削除します。問題は、ファイルを再度書き込むと、データが末尾に追加され、既存のルールが複製されることです。

多くの試行錯誤の末にたどり着いた最終的なコードは次のとおりです。

function mytheme_save_page_css( $post_id ) {

    $margin = get_post_meta( $post_id, '_page_margin', true );
    $padding = get_post_meta( $post_id, '_page_padding', true );
    $bgcol = get_post_meta( $post_id, '_page_bg_col', true );

    $newmargin = sanitize_text_field( $_POST['pagemargin'];
    $newpadding = sanitize_text_field( $_POST['pagepadding'];
    $newbgcol = sanitize_text_field( $_POST['pagebg'];

    if ( $margin != $newmargin || $padding != $newpadding || $bgcol != $newbgcol ) {

        $file = get_stylesheet_directory() . '/lib/css/sections/style.css';
        $css = 'header{margin:'.$newmargin.';padding:'.$newpadding.';background-color:'.$newbgcol.';}';

        file_put_contents($file, $css, FILE_APPEND | LOCK_EX);

    }

    update_post_meta( $post_id, '_page_margin', $newmargin );
    update_post_meta( $post_id, '_page_padding', $newpadding );
    update_post_meta( $post_id, '_page_bg_col', $newbgcol );

}

それらのルールを何度も複製する (そして別の CSS ファイルを作成する) のではなく、それらのルールのみを置き換える方法はありますか?

4

1 に答える 1

0

これは負け負けの状況です...phpは何を保持し、何を変更するかを知っている必要があります。それはcss-contentの解析を意味しますが、これはあなたの範囲外だと思います。

私の解決策は、すべての「置き換え可能な」css-rules が存在し、書き込みごとにすべてを置き換える個別の css-file を持つことです。

commentまたは、メインの css ファイルで、置き換えたいルールの周りに特別な -delimiter (一意の文字列) を使用し、その区切り文字を検索して、すべてを外側に保持し、内側をすべて置き換えることもできます。これはもう少し複雑ですが、実行可能です。

PS:EXロックされている間にクライアントがファイルを要求するセミレーシング条件に注意する必要があります...ロックは(私の知る限り)クライアントが要求した単純なサービスを妨げません.. . ただ注意してください。

于 2015-07-25T16:13:16.887 に答える