• 解決済 LUARCE

    (@luarce)


    皆さま、教えて下さい。

    現在、WordPressでお客さんのサイトを制作しているのですが、
    件名の通り自身のデモ環境では起きないエラーがお客さんの環境で発生しています。

    現象ですが、URLを見ると、~/wp-admin/post.phpとなった状態で、
    画面がホワイトアウトします。
    これが自身の環境では発生せず、公開前・更新前の画面にちゃんと戻るのですが、
    お客さんの環境では戻ってこれず、ブラウザバックで戻ります。

    ただ、更新したり作成した内容は『保存されています』。

    発生ポイントは以下となります。
    ・固定ページやカスタム投稿ページを新規作成して公開、下書き保存、更新したりする場合
    ・テーマを子テーマに変更したり戻したりする際、稀に発生
    ・プラグインを有効化した際

    また、環境ですが、
    自分:WordPress4.7.2
       twentysixteenの子テーマ
       通常のレンタルサーバー

    お客様:WordPress 4.6.5
       twentysixteenの子テーマ
       独自サーバー
    となります。

    お客さんですが、独自のサーバーでしてセキュリティーの関係上
    アップグレードは不可、本体ファイルの改変も不可となっています。
    そのため、wp-config.phpを触ることはできません。

    特殊な環境を構築されています。
    管理画面などの見た目はWordPressなのですが、
    プラグインなどは管理画面からインストールできない
    ようになっています。

    自身のデモ環境でも試してみましたがエラーが事象が発生していない以上、
    やはりwp-configのデバッグをtrueにしても何も発生しませんでした。

    一応、この後WordPressの環境をダウングレードしようとは思っていますが・・・

    自分なりの推論ですが、
    お客さんの環境がやはり少し特別だからのような気もしています。

    ただ、テンプレートファイルをsixteenのオリジナルに戻したら
    現象発生することなくプラグインの有効化はできた気がします。
    となるとやはりカスタマイズが良くない...気もします。

    お客様について詳しく書けないためすみませんが、
    そういう事ってあるのでしょうか?

    それともやはりfunctions.phpとか何か個別のphpファイルが邪魔しているとか、
    もし近いご経験をされた方がいらっしゃるようでしたら
    教えて頂けませんでしょうか?

    抽象的な質問になってしまい恐縮いたしますが、
    分かる、というよりご経験則から何かアドバイスを頂けましたら
    助かります。

    お手数ですが、何卒よろしくお願い申し上げます。

15件の返信を表示中 - 1 - 15件目 (全15件中)
  • CG

    (@du-bist-der-lenz)

    テーマを変える。プラグインを見直す。パーマリンク設定などが特殊になっていないか。その辺りは片付けましたか。

    トピック投稿者 LUARCE

    (@luarce)

    CG 様

    お世話になります。先日はありがとうございました。

    今、やってみましたが症状の改善はありません。

    テーマを変更するとうごくようです・・・

    ただデモ環境も同じバージョンに変更したのですが、
    やはり同じ症状はでません。

    ちなみにプラグインが原因の場合、事象発見のため
    「停止」にしたりしてチェックすればよいのでしょうか?

    それともアンインストールしておいた方が良いのでしょうか?

    パーマリンクも特に問題なさそうなんですが・・・
    ちなみに/%postname%/%post_id%でやっています。特殊ではないと思うのですが・・・

    トピック投稿者 LUARCE

    (@luarce)

    少し進展がありました。

    functions.phpを一番初めの子テーマを作った時の状態

    <?php add_action( ‘wp_enqueue_scripts’, ‘theme_enqueue_styles’ );
    function theme_enqueue_styles()
    { wp_enqueue_style( ‘parent-style’, get_template_directory_uri() . ‘/style.css’ );
    }?>

    にして、後から追加した記述を削除しましたところ動きました。
    functions.phpの記述をチェックしてみたいと思います。

    CG

    (@du-bist-der-lenz)

    functions.phpに記述を追記して、機能状態になるプラグインを確認しましょう。

    トピック投稿者 LUARCE

    (@luarce)

    CG様

    親身ご相談に乗って下さいましてありがとうございます。

    すみません、機能状態になるプラグインの確認とはどういうことになりますでしょうか?

    今、追加した記述を一つ一つチェックしていたのですが、
    もしかして根本的な書き方が間違っているのかもと思い始めました。

    ただ、デモ環境では以下の書き方で動いていたため大丈夫だと思っていたのですが・・・
    functions.phpで最低限制御したい項目がいくつかあり、
    それができないと困ってしまいます。

    恐れ入りますが少し見て頂けないでしょうか?

    
    <?php add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' ); 
        function theme_enqueue_styles() 
        { wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' ); 
    }?>
    
    <?php
    function change_document_title_parts( $title_parts ){
        $title_parts['tagline'] = '';
        $title_parts['site'] = '';
    
      $site_name = trim( get_bloginfo('name') );
      $title_parts['tagline'] = '';
      if(is_front_page()): //フロントページの場合
        $title_parts['title'] = 'サイトタイトル';
        $title_parts['site'] = 'サイト名';
      elseif(is_search('sessions')):
        $title_parts['title'] = 'サイトタイトル';
        $title_parts['site'] = 'サイト名';
      elseif(is_404()): //404ページの場合
        $title_parts['title'] = 'お探しのページは見つかりませんでした';
      endif;
      return $title_parts;
    }
    add_filter( 'document_title_parts', 'change_document_title_parts' );
    ?>
    
    <?php
    class relative_URI {
        public function __construct() {
            add_action('get_header', array(&$this, 'get_header'), 1);
            add_action('wp_footer', array(&$this, 'wp_footer'), 99999);
        }
        protected function replace_relative_URI($content) {
            $home_url = trailingslashit(get_home_url('/'));
            $top_url = preg_replace( '/^(https?:\/\/.+?)\/(.*)$/', '$1', $home_url );
            return str_replace( $top_url, '', $content );
        }
        public function get_header(){
            ob_start(array(&$this, 'replace_relative_URI'));
        }
        public function wp_footer(){
            ob_end_flush();
        }
    }
    $relative_URI = new relative_URI();
    ?>
    
    <?php
    function imgpath($arg) {
    $content = str_replace('"img/', '"' . get_stylesheet_directory_uri() . '/img/', $arg);
    return $content;
    }
    add_action('the_content', 'imgpath');
    ?>
    
    <?php //公開日・更新日
    function get_mtime($format) {
        $mtime = get_the_modified_time('Ymd');
        $ptime = get_the_time('Ymd');
        if ($ptime > $mtime) {
            return get_the_time($format);
        } elseif ($ptime === $mtime) {
            return null;
        } else {
            return get_the_modified_time($format);
        }
    }
    ?>
    
    <?php
    function my_result_count() {
      global $wp_query;
    
      $paged = get_query_var( 'paged' ) - 1;
      $ppp   = get_query_var( 'posts_per_page' );
      $count = $total = $wp_query->post_count;
      $from  = 0;
      if ( 0 < $ppp ) {
        $total = $wp_query->found_posts;
        if ( 0 < $paged )
          $from  = $paged * $ppp;
      }
      printf(
        '<p>%2$s%3$s件(%1$s件中)</p>',
        $total,
        ( 1 < $count ? ($from + 1 . '〜') : '' ),
        ($from + $count )
      );
    }
    ?>
    
    <?php //サーチテンプレートをカスタム投稿タイプ別にする ※そのままだと全ての記事を見に行ってしまうため
    add_filter('template_include','custom_search_template');
    function custom_search_template($template){
      if ( is_search() ){
        $post_types = get_query_var('post_type');
        foreach ( (array) $post_types as $post_type )
          $templates[] = "search-{$post_type}.php";
        $templates[] = 'search.php';
        $template = get_query_template('search',$templates);
      }
      return $template;
    }
    ?>
    
    <?php //カスタムフィールドテンプレートボタンを押すためのJS
    function _register_custom_js( ) {
        $_current_theme_dir = get_stylesheet_directory_uri();
        $_custom_js = '<script src="recruit/wp-content/themes/twentysixteen_child/js/CustomFieldAuto.js"></script>';
        echo $_custom_js . "n";
    }
    add_action('admin_head', '_register_custom_js');
    ?>
    
    <?php //不要なpタグを削除
    remove_filter( 'the_content', 'wpautop' );
    remove_filter( 'the_excerpt', 'wpautop' );
    ?>
    

    お手数おかけいたしますが、何卒よろしくお願い申し上げます。

    CG

    (@du-bist-der-lenz)

    どういうわけで全てが、<?php ではじめて ?>で閉じきっているのでしょうか。

    プラグインには、有効化されている時だけ、functions.phpに追記をして機能するようになっているものもあります。

    一行以上の空行が入ると、命令が途絶えるので、最終行は改行を入れない鉄則があります。

    トピック投稿者 LUARCE

    (@luarce)

    CG様

    お世話になります。
    functions.phpに追記したい場合は、<?php 処理 ?>で加えていくという
    記事を見まして、ずっとそれでやっていました。
    実際にそれでエラーなく動いていたため気がつかずにおりました。

    いろいろ記事を見て回ったのですが、
    子テーマ functions.php → 親テーマ functions.php
    と動くんですね・・・エラーが出るわけだと納得はできたのですが・・・

    プラグインの動きにつきましては参考になります。
    ありがとうございます。

    やはり根本の書き方が間違っていたということですね・・・

    それで、調べてみたのですが、

    
    function after_all() {
     <処理>
        }
    
    // 親テーマの後に実行
    add_action( 'after_setup_theme', 'after_all' );
    

    実行順序を変更してあげればできるという記事を見たのですが、
    もしお分かりになるようでしたら、
    先ほどのコードにどう適用させていったらいいのかご指導
    いただけないでしょうか?

    宜しくお願い申し上げます。

    トピック投稿者 LUARCE

    (@luarce)

    おはようございます。

    昨日、CG様より
    「一行以上の空行が入ると、命令が途絶えるので、最終行は改行を入れない鉄則があります。」
    を見まして行間を削除していったらホワイトアウトしなくなった模様です。

    今、検証しておりますが、実行順序についてもう少し詳しくみましたところ、
    親テーマのfunctions.phpの関数に重複がなければエラーにならないとありました。

    恐らく親テーマのfunctions.phpと重複する関数はないためデモ環境でも動いていた
    と考えますと、実行順序を変えなくてもできそうだと思いましたので、
    <?php ?>の構文を見直しつつ調整していきたいと思います。

    <?php 一行以上の空行が入ると、命令が途絶えるので、最終行は改行を入れない鉄則があります。
    という問題を避けるために、通常は

    <?php で始まって ?>では閉じないようにすることかと思います。
    functions.php は
    —–
    <?php



    —–

    という感じに ?> で閉じないことで、その問題を回避できるということですね。

    参考:http://thesaibase.com/php/end-tag

    • この返信は7年、 5ヶ月前にkimipoohが編集しました。
    トピック投稿者 LUARCE

    (@luarce)

    kimipooh 様

    お世話になります。
    ご指導ありがとうございます。

    参考サイト拝見しました。
    助かります。

    この後、修正したコードをアップしたいと思います。
    もし気になる部分がございましたらご指導よろしくお願い致します。

    トピック投稿者 LUARCE

    (@luarce)

    皆さまのご指導をいただきまして、
    以下のように子テーマのfunctions.phpを書き換えてみましたところ、
    正常に動作をはじめました。

    ・余分な改行を全て削除し、コメントアウトで行間を作成しました
    ・全てについていた<?PHPを削除しました
    ・?>で閉じていたのをやめました

    もしおかしい部分などがありましたら引き続き
    ご教授頂けましたら幸いです。

    
    <?php add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' ); 
        function theme_enqueue_styles() 
        { wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' ); 
    }
    /***************************************************
    ****************************************************
    ****************************************************/
    //PATH
    function imgpath($arg) {
    $content = str_replace('"img/', '"' . get_stylesheet_directory_uri() . '/img/', $arg);
    return $content;
    }
    add_action('the_content', 'imgpath');
    /***************************************************
    ****************************************************
    ****************************************************/
    //公開日・更新日
    function get_mtime($format) {
        $mtime = get_the_modified_time('Ymd');
        $ptime = get_the_time('Ymd');
        if ($ptime > $mtime) {
            return get_the_time($format);
        } elseif ($ptime === $mtime) {
            return null;
        } else {
            return get_the_modified_time($format);
        }
    }
    /***************************************************
    ****************************************************
    ****************************************************/
    //ページネーション
    function my_result_count() {
      global $wp_query;
      $paged = get_query_var( 'paged' ) - 1;
      $ppp   = get_query_var( 'posts_per_page' );
      $count = $total = $wp_query->post_count;
      $from  = 0;
      if ( 0 < $ppp ) {
        $total = $wp_query->found_posts;
        if ( 0 < $paged )
          $from  = $paged * $ppp;
      }
      printf(
        '<p>%2$s%3$s件(%1$s件中)</p>',
        $total,
        ( 1 < $count ? ($from + 1 . '〜') : '' ),
        ($from + $count )
      );
    }
    /***************************************************
    ****************************************************
    ****************************************************/
    //サーチテンプレートをカスタム投稿タイプ別にする
    //※そのままだと全ての記事を見に行ってしまうため
    add_filter('template_include','custom_search_template');
    function custom_search_template($template){
      if ( is_search() ){
        $post_types = get_query_var('post_type');
        foreach ( (array) $post_types as $post_type )
          $templates[] = "search-{$post_type}.php";
        $templates[] = 'search.php';
        $template = get_query_template('search',$templates);
      }
      return $template;
    }
    /***************************************************
    ****************************************************
    ****************************************************/
    //カスタムフィールドテンプレートボタンを押すためのJS
    function _register_custom_js( ) {
        $_current_theme_dir = get_stylesheet_directory_uri();
        $_custom_js = '<script src="/recruit/wp-content/themes/twentysixteen_child/js/CustomFieldAuto.js"></script>';
        echo $_custom_js . "n";
    }
    add_action('admin_head', '_register_custom_js');
    /***************************************************
    ****************************************************
    ****************************************************/
    //カスタムフィールドテンプレートボタンを押すためのJS//不要なpタグを削除
    remove_filter( 'the_content', 'wpautop' );
    remove_filter( 'the_excerpt', 'wpautop' );
    
    • この返信は7年、 5ヶ月前にLUARCEが編集しました。
    トピック投稿者 LUARCE

    (@luarce)

    お世話になります。

    今しがた一通り動作確認を行いましたところ、
    問題となっていた挙動もなく
    安定した動きになりました。

    本当にありがとうございました。

    ヒントを頂かなかったら今も右往左往していたことと
    心より御礼申し上げます。

    本当にありがとうございました。

    またの際にもよろしくお願い致します。

    コードの中身はともかく、PHPコードの書式としては問題ないと思います。

    こんにちは

    以下の3点が気になりました。

    1.
    <?php ?> の内側は、PHP コードなので改行してもブラウザに改行が出力されることはないですよ。見やすいように改行を入れましょう。
    厳密にいうと PHP はコードを逐次処理するインタープリタ言語なので処理速度にまったく影響しないというわけではないのでしょうが気にする程度ではないと思います。
    それよりも、コードの可読性が低下してバグを生んでしまっては本末転倒です。

    2.
    _register_custom_js 関数内の、
    $_current_theme_dir = get_stylesheet_directory_uri();
    は不要では。$_current_theme_dir は使用されていません。

    3.
    _register_custom_js 関数内の、
    echo $_custom_js . "n";

    echo $_custom_js . "\n";
    では、ないでしょうか?(転記ミス?)

    トピック投稿者 LUARCE

    (@luarce)

    ishitaka 様

    お世話になります。

    ご教授いただきまして、誠にありがとうございます。
    なるほどと知らなかったことばかりで本当に勉強になります。

    ちなみに2.、3.ともというかコードのほぼ全て
    ネット情報を持ってきてカスタマイズしたりしています。

    そのため中身はよくわかってないんです・・・すみません。

    ただちゃんと動いていたので気にせずにおりました。

    今しがた実証のためやってみましたところ、
    動作に変化なく大丈夫でした。

    間違っていても動くものなんですね。。。?

    いろいろ診て下さいまして本当にありがとうございます。
    とてもありがたく、心より御礼申し上げます。

15件の返信を表示中 - 1 - 15件目 (全15件中)
  • トピック「2つの異なる環境で一方の画面がホワイトアウトする現象」には新たに返信することはできません。