web-dev-qa-db-ja.com

を使う PHP スタイルシートとヘッダー画像を切り替えるには、cookieに設定します。

私は以前、クッキーやWordpressを使った作業はあまりしていませんでしたので、私は私の探求において少し楽観的すぎたと思います。サイドバーのphp対応のテキストウィジェットから好きなテーマを選択できるようにしたいのですが、その場合は選択したクッキーを適切なスタイルシートに変更します(夜はstyle.css、デフォルトは、day1のstyle1.cssで、新しいヘッダー画像をロードします。

http://somethingoriginal.net の代わりにここに機能のソートがありますが、私が説明したようにChromeにクッキーがすぐには設定されていないようです、エコーテスト用の変数を出力するために使用したステートメントは一貫していないようです。数回クリックすると変更されますが、ヘッダー画像はまったく表示されません。 Firefoxでは、私のURLの最後にバックスラッシュを付けることがあります。これにより、ユーザーは "見つかりません"ページに移動します。私はそれがIEで何をするのかわかりません。

機能を向上させるために何をする必要があるのでしょうか。私はこれを必要としません。2つのイメージを作成したので、それを試して実装したいと思います。

PHPサイドバーテキストウィジェット:

    getStyles();

    if (isset($_COOKIE["chosenStyle"]))
    echo "Your current theme is ".$_COOKIE["chosenStyle"].", enjoy!";

    else if (isset($_POST['styles']))
    echo  "Your current theme is". $_POST['styles'].", enjoy!";

    else
    echo "Your current theme is night, enjoy!";
    ?>

編集:これを読んだ後、私は今私の関数/ヘッダファイルを更新し、新しいコードを含めました https://stackoverflow.com/questions/5936054/php-set-cookie- を発行してください。ページのCSSが自動的に更新されるようになりました。選択を反映するようにテキストウィジェットを変更する必要はありません。私はまだヘッダの問題を抱えています

Functions.phpファイル

function setDayHeader(){
         //Set header to day header
         $args = array(
         'width'         => 1000,
         'height'        => 288,
         'default-image' => get_template_directory_uri() . '/images/headers/SomethingOriginalSun.png',
         );
        add_theme_support( 'custom-header', $args );    
}

function setNightHeader(){
         $args = array(
         'width'         => 1000,
         'height'        => 288,
         'default-image' => get_template_directory_uri() . '/images/headers/SomethingOriginalTheMoonAndStars.png',
         );
         add_theme_support( 'custom-header', $args );       
}


function getStyles() {
echo '<form method="post" class="styles" name="styles" action="\">
        <select name="styles">
        <option value="night">Night</option>
        <option value="day">Day</option>
        </select>
        <button class="submit" name="userStyleChoiceForm" onclick="submit">Set style</button></form>';
}

    //Set a cookie for the stylesheet   
    if (isset($_POST["styles"])) { 
        $chosenStyle = ($_POST["styles"]); 
        setcookie("chosenStyle", $chosenStyle ,time()+31536000, "");
        echo "I have set a cookie with the value ".$_COOKIE["chosenStyle"]; 
    }

Header.php

   <!-- if cookie is set, check here and then change style sheet based on cookie -->
<?php
if (!(isset($_POST["styles"]))) { //if post not set (first visit)

    if (!(isset($_COOKIE["chosenStyle"])) || ($_COOKIE["chosenStyle"]) == "night") { //if cookie not set, or is night theme ?>
         <link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" />
         <?php
            setNightHeader();
    }
    else { //cookie must be set to day theme, use day ?>
         <link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/style1.css" type="text/css">
         <?php
            setDayHeader();
    }
}

else { //if post is set 

    if (($_POST["styles"]) == "day") { //if they have chosen the day theme ?>
         <link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/style1.css" type="text/css"> <?php
    }

    else if($_POST["styles"] == "night") { //if they have chsoen the night theme ?>
     <link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" />  <?php
    }   
 } ?>

私はheader.phpファイルにクッキーを設定しようとしましたが、その後 'modify headers'エラーが出ました。

正しい$ _POST変数を参照しているのかどうか100%確信が持てず、私が見つけた多数のチュートリアルを組み合わせてみたので、どんな助けにも感謝します!私はその分メインのサイトから作業していることに気付きましたが、それでもまだ「起動」されていません。近いうちにダミーの/ test WPサイトを作成したいです。他の場所で。ありがとう

2
Vixxd

私はこれが古い投稿であることを知っています、そしてあなたはおそらくすでに答えを見つけた、しかしここに行きます...

Cookieを設定するときは、ここで説明しているようにHTTPヘッダーにCookieを含める必要があります。 http://php.net/manual/en/function.setcookie.php

これは、ヘッダーが送信される前に、functions.phpファイル(未テスト)に次のようなWordpressのアクションフックを追加する必要があることを意味します。

私は 'template_redirect'を使用しましたが、 'init'を使用して読むこともできます。

add_action( 'template_redirect', 'set_cookie');
function set_cookie() {
    // Set cookie 
    if (isset($_POST["styles"])) {
        setcookie("chosenStyle", $chosenStyle ,time()+31536000, "");
        wp_redirect( home_url() ); // Redirect back to home page 
        exit; 
    }
}

Wordpressのアクション/フィルタとこのページについて読んでください: http://codex.wordpress.org/Plugin_API/Action_Reference/template_redirect

1
TomC