0

Wordpress テーマで条件付きの場合、次のような不格好なバージョンを作成しようとしています。スタイルタグを2回開いたり閉じたりせずにそれを行う方法を見つけようとしています:

<?php if (get_theme_mod( 'main_color' )) : ?>
  <style>
    #branding {
        background: <?php echo get_theme_mod( 'main_color', '#243964' )."\n"; ?>;
    }
    a:link {
        color: <?php echo get_theme_mod( 'main_color', '#243964' )."\n"; ?>;
    }
  </style>
  <?php endif ?>
  <?php if (get_theme_mod( 'links_color' )) : ?>
  <style>
    #wrapper a:link {
        color: <?php echo get_theme_mod( 'links_color', '#6C84B4' )."\n"; ?>;
    }   
  </style>
  <?php endif ?>

私は2つを次のものと組み合わせようとしました:

<?php if (get_theme_mod( 'main_color' || 'links_color' )) : ?>
      <style>
        #branding {
            background: <?php echo get_theme_mod( 'main_color', '#243964' )."\n"; ?>;
        }
        a:link {
            color: <?php echo get_theme_mod( 'main_color', '#243964' )."\n"; ?>;
        }
        #wrapper a:link {
            color: <?php echo get_theme_mod( 'links_color', '#6C84B4' )."\n"; ?>;
        }   
      </style>
      <?php endif ?>

しかし、何らかの理由でこれが機能しません。

何か助けはありますか?

4

5 に答える 5

1

試してみてください:

<?php if (get_theme_mod( 'main_color') || get_theme_mod( 'links_color' )) : ?>
于 2012-09-19T12:58:04.747 に答える
1
<?php if (get_theme_mod( 'main_color' || 'links_color' )) : ?>

する必要があります

<?php if (get_theme_mod( 'main_color') || get_theme_mod('links_color') )) : ?>

は関数であるためget_theme_mod()、パラメーターを渡します。関数を変更していくつかのパラメーターを受け入れることができ、次のように関数を呼び出すことができます。

<?php 
function get_theme_mod($main_color, $links_color) {
   // do stuff and return bool
}

if (get_theme_mod( 'main_color', 'links_color' )) : 
?>

また、それはあなたがやろうとしていることの主な問題ではありませんが、終了する必要があります<?php endif; ?>

于 2012-09-19T12:58:09.507 に答える
1

あなたの投稿をもう一度読んだ後、これがあなたが達成しようとしていることだと思います:

<style>
<?php if (get_theme_mod( 'main_color' )) : ?>
    #branding {
        background: <?php echo get_theme_mod( 'main_color', '#243964' )."\n"; ?>;
    }
    a:link {
        color: <?php echo get_theme_mod( 'main_color', '#243964' )."\n"; ?>;
    }
<?php endif ?>
<?php if (get_theme_mod( 'links_color' )) : ?>
    #wrapper a:link {
        color: <?php echo get_theme_mod( 'links_color', '#6C84B4' )."\n"; ?>;
    }   
<?php endif ?>

</style>

これは、テーマのオプションに応じて、必要な css コードのみを表示しますが、<style>開始タグと終了タグは 1 つしかありません。

于 2012-09-19T12:59:23.437 に答える
0
<?php if (get_theme_mod( 'main_color' ) || get_theme_mod( 'links_color' )) : ?>
<style type="text/css">
<?php endif ?>
<?php if (get_theme_mod( 'main_color' )) : ?>
#branding {
    background: <?php echo get_theme_mod( 'main_color', '#243964' )."\n"; ?>;
}
a:link {
    color: <?php echo get_theme_mod( 'main_color', '#243964' )."\n"; ?>;
}
<?php endif ?>
<?php if (get_theme_mod( 'links_color' )) : ?>
#wrapper a:link {
    color: <?php echo get_theme_mod( 'links_color', '#6C84B4' )."\n"; ?>;
}   
<?php endif ?>

<?php if (get_theme_mod( 'main_color' ) || get_theme_mod( 'links_color' )) : ?>
</style>
<?php endif ?>
于 2012-09-19T13:15:33.743 に答える
0

上記の答えは良いですが、何かが欠けていると思います。

元のコードは次のようになります。

  • 条件 A が満たされた場合、特定のスタイルを追加します。
  • 条件 B が満たされた場合、追加のスタイルが追加されます。

これらを次のように組み合わせます。

<?php if (get_theme_mod( 'main_color') || get_theme_mod( 'links_color' )) : ?>

OP の試行のエラーを修正しますが、OP の試行は単に印刷するという当初の目標に対する正確な解決策ではありませんでした"less style tags"。これは、これらの条件のいずれかが満たされた場合、両方のスタイルが適用されるためです。

(おそらくこれは望ましい機能ですか?)

元のロジックに固執するため、ジェラルドの答えはより近いですが、STYLEタグが満たされているかどうかに関係なく、常にタグを出力します。元の投稿者が「HTML をきれいにする」ことを望んでいることを考えると、STYLE印刷するスタイルがある場合にのみタグを投稿するというより良い解決策がまだあります。

解決策は、PHP ですべてのロジックを実行し、HTML をバッファーに追加してから、バッファーが空でない場合はそのバッファーを出力することです。実際のバッファを使用するob_start()か、文字列を変数に保存するだけでこれを行うことができます。より単純な「変数に保存」アプローチを使用します。

<?php
// initialize the buffer we'll save our style strings too
$buffer = '';
// save the styles to the buffer for main
if (get_theme_mod( 'main_color' )) {
    $buffer .= 
    "#branding {
         background: " . get_theme_mod( 'main_color', '#243964' ) . "\n
    }
    a:link {
         color: " . get_theme_mod( 'main_color', '#243964' ) . "\n
    }\n";
}
// save the styles to the buffer for link colors
if (get_theme_mod( 'links_color' )) {
    $buffer .= 
    "#wrapper a:link {
          color: " . get_theme_mod( 'links_color', '#6C84B4' ) . "\n
    }\n";
}

// verify there's styles to print and print them into a single STYLE tag
if(!$buffer) {
    echo "<style>" . $buffer . "</style>";
}

?>

この意志:

  1. 追加のスタイルがいつ追加されるかに関して、同じロジックを維持する
  2. STYLEタグを1 つだけ印刷する
  3. STYLE印刷するスタイルがある場合にのみタグを印刷する

それが役立つことを願っています!

于 2012-09-19T13:42:09.853 に答える