WordPressテーマSANGOの質問

子テーマ内でトップに戻るボタンの表示開始地点の変更

アバター
田中

お世話になっております。
トップに戻るボタンの開始地点を変更したいと思いsng-functions.phpの614行目を
scrollTop() > 150)  と数値だけ変更しました。
その後、変更したファイルを子テーマの階層に /themes/sango-theme-child/library/functions とフォルダを作り、先程の数値を変更したファイルをアップロードしました。しかし、変更が反映されず、親の同名のファイルを置き換えると変更が反映されます。
子テーマ内でトップに戻るボタンの開始地点を変更するには他にも作業が必要なのでしょうか?それとも、そもそも方法が間違っているのでしょうか?
ご指導ご鞭撻のほどよろしくお願いいたします。

SANGO
質問板アーカイブ
コメントへの回答
サルワカくん
サルワカくん
2019/10/20

functions系のファイルは子テーマで複製して上書きすることはできません。
参考:functions系のファイルを子テーマに複製しても反映されない

理由を説明すると長くなるのですが、一言でいうとfunctions系のファイルをまるっと上書きするとアップデート時に壊れる可能性が非常に高いためです。

とはいえ、それぞれの関数ごとに子テーマのfunctions.phpで上書きできるようになっています。
今回の件については、以下のようなコードを子テーマのfunctions.phpに追加すればOKです。

【追記:↓こちらはSANGO2.0〜用のコードです。それ以前のバージョン用のコードはさらに下の返信にて記載しています】

// 既存のトップへ戻るボタンのJSを解除
function remove_go_top_btn_js(){
  remove_action('wp_footer', 'go_top_btn_js', 100);
}
// トップへ戻るボタンを上書き
function my_go_top_btn_js() {
  if (is_singular()) {
    if (wp_is_mobile() && get_option('show_to_top') || !wp_is_mobile() && get_option('pc_show_to_top')) {
      $script =<<< EOM
jQuery(document).ready(function() {
  jQuery(window).scroll(function() {
    if (jQuery(this).scrollTop() > 150) {
      jQuery('.totop').fadeIn(300);
    } else {
      jQuery('.totop').fadeOut(300);
    }
  });
    jQuery('.totop').click(function(event) {
      event.preventDefault();
      jQuery('html, body').animate({scrollTop: 0}, 300);
    })
  });
EOM;
    echo '<script>'. sng_minify_js($script) . '</script>'; 
    }
  }
}

add_action('after_setup_theme','remove_go_top_btn_js');
add_action('wp_footer', 'my_go_top_btn_js', 100);

よろしくお願いします。

アバター
田中
2019/10/23

分かりやすい説明、ありがとうございます。
今後、functions系ファイルの編集の際は教えていただいた方法で試してみます。

アバター
田中
2019/10/24

お世話になっております。先日はありがとうございました。
しかしながら、問題が起きてしまいました。コードを管理画面のテーマエディターを利用し子テーマのfunctions.phpに実際に貼り付けて、ファイルの更新をしたところ
Uncaught Error: Call to undefined function sng_minify_js() in wp-content/themes/sango-theme-child/functions.php:67
というエラーが起きてしまいました。
67行目の内容はは上記コードの24行目に該当する  echo ”. sng_minify_js($script) . ”;  です。
sng_minify_jsをキーワードにダウンロードした状態の親ファイル内を検索してみましたが、該当するものがなく記述を削除してしまったというわけではなさそうなのですが、該当するものがなく呼び出せていないということしかわからず再度、ご教授願えればと質問いたします。
教えていただいた通りに、やったとは思うのですが、何が問題なのか分からず…よろしくお願いいたします。

サルワカくん
サルワカくん
2019/10/29

「Akismet Anti-Spam」によりこちらのコメントがスパム判定されておりました。
(エラーコードがスパム判定されたようです)
失礼いたしました。

エラーが発生したとの件、ご迷惑おかけしました。
こちらうっかり次リリースのSANGO用のコードを書いてしまっておりました。申し訳ありません。
以下のコードに書き換えていただけますと幸いです。
(こちらは次回アップデート後も動きます)

// 既存のトップへ戻るボタンのJSを解除
function remove_go_top_btn_js(){
  remove_action('wp_footer', 'go_top_btn_js', 100);
}
// トップへ戻るボタンを上書き
function my_go_top_btn_js() {
  if (is_singular()) {
    if (wp_is_mobile() && get_option('show_to_top') || !wp_is_mobile() && get_option('pc_show_to_top')) {
      echo <<< EOM
<script>
jQuery(document).ready(function() {
  jQuery(window).scroll(function() {
    if (jQuery(this).scrollTop() > 150) {
      jQuery('.totop').fadeIn(300);
    } else {
      jQuery('.totop').fadeOut(300);
    }
  });
    jQuery('.totop').click(function(event) {
      event.preventDefault();
      jQuery('html, body').animate({scrollTop: 0}, 300);
    })
  });
</script>
EOM;
    }
  }
}

add_action('after_setup_theme','remove_go_top_btn_js');
add_action('wp_footer', 'my_go_top_btn_js', 100);

よろしくお願いいたします。

アバター
田中
2019/10/29

こちらの不手際でご迷惑おかけして申し訳ありません。今度から、コードに関する質問をするときは気をつけます。
再度、教えていただいたコードを追加したところ、無事動作しました。ありがとうございます。

サルワカくん
サルワカくん
2019/10/29

いえ、こちらこそ申し訳ありません。
よろしくお願いいたします。