2017-02-19 15 views
0

jQueryを使用してボタンを切り替えようとしています。jQueryを切り替えるPHP

作品
jQuery(document).ready(function($) { 
    $("#wp-admin-bar-maintenance").click(function() { 
     var data = { action: 'maintenance' }; 

     $.post(maintenance.ajaxurl, data, function(response) { 
      $(".maintenance-icon").toggleClass('flicker'); 
     }); 

     return false; 
    }); 
}); 

、ボタンは「ちらつき」クラスを持っており、それがトグルだが、今PHP側はそれをめちゃくちゃ。これは何

function maintenance_adminbar() { 
global $wp_admin_bar; 

if(current_user_can('manage_options')){ 
    if(get_option('maintenance') == true) { 
     $wp_admin_bar->add_menu(array(
      'id' => 'maintenance', 
      'title' => __('Maintenance') . get_option('maintenance'), 
      'href' => '#', 
      'meta' => array(
       'class' => 'maintenance-icon flicker' 
      ) 
     )); 
    } else { 
     $wp_admin_bar->add_menu(array(
      'id' => 'maintenance', 
      'title' => __('Maintenance') . get_option('maintenance'), 
      'href' => '#', 
      'meta' => array(
       'class' => 'maintenance-icon' 
      ) 
     )); 
    } 
} 

} 
add_action('admin_bar_menu', 'maintenance_adminbar', 9999); 

はそれがget_option('maintenance')trueときにPHPを使用してボタンに「ちらつき」と呼ばれるクラスを追加しています。

しかし、トグル機能はこれ以上切り替えられません。私がクリックすると、それはトグルしようとしているのがわかりますが、PHPコードのフリッカークラスがオーバーライドしています。

これを修正する方法はありますか?


更新。

これは上記のAJAX関数が使用するping関数です。

function maintenance_process() { 
    update_option('maintenance', !get_option('maintenance')); 
    echo get_option('maintenance'); 
    die(); 
} 
add_action('wp_ajax_maintenance', 'maintenance_process'); 
+1

なぜPHPを使用してボタンにクラスを追加しようとしていますか? PHPはサーバー側のコードです。私はこれがどのように動作するのか見ていない。また、コードの多くを見たいのですが、これは間違っている可能性がある場所がたくさんあるためです(たとえば、 'maintenance.ajaxurl'とは何ですか?そしてこのセットはどこにありますか?なぜjQueryだけで簡単に実現できるのか、PHPでこのようなことをしようとするのは本当にわかりません。必要なサーバからの情報であれば、 '$ .get()'でその情報を取得し、jQueryを続けます。 –

+0

@LaurensSwartユーザーがボタンをクリックすると、ボタンが赤く変わります。しかし、ユーザーがページをリロードすると、ボタンは赤色のままでなければなりません。私の唯一の選択肢は、PHPを使用して要素に「flicker」という赤いクラスを追加することでした。 – Mitch

+0

データベースやクッキーにボタンの状態を保存してjQueryがトグルを処理させないようにしましょう。 –

答えて

2

は、私はいくつかの変更を行うだろうが、これは唯一の私の経験、ワークフローに基づいており、私は物事をしたいどのように私はそれぞれのノートや根拠を含んでいますので。

AJAXコール:私は読み、JavaScriptでの反応、そしてそれは小さくて解析するのは簡単ですので、私は常に(可能な場合)JSONとしてそれを送り返すことができます実際の値を返すために、私のAJAXを設定したいです。

<?php 
function maintenance_process(){ 
    $maintenance = 1; 
    if(1 == get_option('maintenance')){ 
     $maintenance = 0; 
    } 
    // I don't like using true/false in options and specifically 
    // set the values to 1 or 0 for integer testing. 
    update_option('maintenance', $maintenance); 
    $result = array(
     'maintenance' => $maintenance 
    ); 
    // Print JSON back to javascript 
    exit(json_encode($result)); 
} 
add_action('wp_ajax_maintenance', 'maintenance_process'); 

のJavaScript: JSON AJAXからは、今読んで、それに応じたクラスを切り替えるために使用することができます。この場合、保守がAjax呼び出しからオンまたはオフになっているかどうかを確認し、クラスを設定/削除できます。また、最後に追加されたパラメータでJSONを受け取る関数が$.postになっています。

jQuery(document).ready(function($){ 
    $("#wp-admin-bar-maintenance").click(function(ev){ 
     ev.preventDefault(); 
     var data = { action: 'maintenance' }; 
     $.post(maintenance.ajaxurl, data, function(response){ 
      if(1 === response.maintenance){ 
       $(".maintenance-icon").addClass('flicker'); 
      } else { 
       $(".maintenance-icon").removeClass('flicker'); 
      } 
     }, 'json'); 
    }); 
}); 

管理バー:このコードは、罰金ですが、私の方法を使用して、あなただけのget_optionチェックを変更します:私は言っていません

if(1 == get_option('maintenance')){...} 

その/渡す変数を設定する私の方法必然的に優れていますが、何千ものサイト(カスタムテーマとプラグイン)にわたって私にとって非常にうまく動作します。さて、あなたのjavascriptとadminのバーコードは、ajaxから返された特定の値に反応しているため、は同期が取れません。

これが機能するかどうか、私たちに連絡してください。

+0

私はこれを感謝します!私はそれを試してみましたが、それは動作していないようです。私があなたに持っているすべてのコードを送ってみることができますので、あなたはそれを試して問題を自分で見ることができますか? – Mitch

+0

あなたのajaxは発砲していますか? '$ .post'関数に' console.log(response) 'を追加すると、その応答が表示され、ボタンをクリックすると値が切り替わりますか?もしそうなら、ajaxは良いとオプションが変化している、我々は次のものを把握する必要があります。 –

+0

はい、発砲しています。しかし、 'maintenance_process'のPHPトグラーは動作していないようです。それは真実のままです。 – Mitch