-1

Essentially I can seem to get jquery to run in wordpress. Here, i have set up a test page to demonstrate - https://www.painandinjurysolutions.co.uk/155-2/.

I am using a tutorials code - http://codepen.io/Guilh/pen/JLKbn

var  mn = $(".main-nav");
    mns = "main-nav-scrolled";
    hdr = $('header').height();

$(window).scroll(function() {
  if( $(this).scrollTop() > hdr ) {
    mn.addClass(mns);
  } else {
    mn.removeClass(mns);
  }
});
* {
  box-sizing: border-box;
}
body {
  margin: 0;
  padding-top: 250px;
}
header {
  height: 300px;
  padding-top: 50px;
  background: #f07057;
}
.main-nav,
.main {
  position: relative; 
}
.main-nav {
  background: #fff;
  height: 80px;
  z-index: 150;
  margin-bottom: -80px;
  box-shadow: 0 2px 3px rgba(0,0,0,.4);
}
header,
.main-nav-scrolled {
  position: fixed;
  width: 100%;
  top: 0;
}
.main {
  background: #f2f2e8;
  padding: 110px 50px 50px;
  column-count: 2;
  column-gap: 40px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<header>
  <h1>This is a Sticky Nav Demo!</h1>
  <p>Creating one of these isn't so bad. Let's learn how with this sweet little demo!</p>
</header>
<nav class="main-nav">
  <a href="#">Nav Link 1</a>
  <a href="#">Nav Link 2</a>
  <a href="#">Nav Link 3</a>
  <a href="#">Nav Link 4</a>
</nav>
<div class="main">
  <h2>Lorem ipsum dolor sit amet</h2>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean fringilla, purus in porttitor pellentesque, erat arcu tincidunt diam, dapibus faucibus leo mauris at sapien. In porttitor vehicula sodales. Vivamus massa neque, facilisis eu felis ut, aliquet convallis nisi. Nam elementum tellus vitae gravida fermentum. Nullam et imperdiet leo. Integer ut euismod lorem, in placerat lacus. Curabitur bibendum arcu ut feugiat commodo. Suspendisse ut mi vel orci ullamcorper tincidunt. Nam vitae fringilla nibh. Nullam hendrerit blandit velit eu hendrerit.</p>

  <p>Praesent eu enim non massa pellentesque lobortis. In in sagittis dolor. Aliquam non massa erat. Ut aliquet gravida tellus, sed volutpat nibh condimentum et. Nunc quam purus, vehicula quis venenatis et, porttitor vel dolor. Cras facilisis dui id elit bibendum, in ullamcorper leo ultricies. Praesent rutrum lacus sit amet sem convallis, ut interdum dolor vestibulum.</p>

  <p>Tum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In iaculis pharetra odio, sit amet consectetur elit facilisis ac. Praesent eget tristique ipsum. Donec malesuada bibendum lacinia. Praesent non purus sodales, pulvinar mi vitae, tincidunt leo. Phasellus vitae elit ut nisl semper fringilla id rutrum dolor. Donec a massa adipiscing, cursus risus vitae, porttitor tortor. Nullam sagittis est sapien, sit amet pharetra turpis imperdiet vel. Etiam sit amet ligula pretium, vulputate eros ac, bibendum velit. Aenean convallis ante purus, ac bibendum orci laoreet ac. Donec a convallis mauris. Nulla non lacus non ipsum pretium tempor. In hac habitasse platea dictumst. Aenean at ipsum vulputate, sagittis dui ut, pharetra neque. Nam eget sodales orci. Aliquam pharetra nunc at nisl pellentesque, nec fringilla enim iaculis.</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean fringilla, purus in porttitor pellentesque, erat arcu tincidunt diam, dapibus faucibus leo mauris at sapien. In porttitor vehicula sodales. Vivamus massa neque, facilisis eu felis ut, aliquet convallis nisi. Nam elementum tellus vitae gravida fermentum. Nullam et imperdiet leo. Integer ut euismod lorem, in placerat lacus. Curabitur bibendum arcu ut feugiat commodo. Suspendisse ut mi vel orci ullamcorper tincidunt. Nam vitae fringilla nibh. Nullam hendrerit blandit velit eu hendrerit.</p>

  <p>Praesent eu enim non massa pellentesque lobortis. In in sagittis dolor. Aliquam non massa erat. Ut aliquet gravida tellus, sed volutpat nibh condimentum et. Nunc quam purus, vehicula quis venenatis et, porttitor vel dolor. Cras facilisis dui id elit bibendum, in ullamcorper leo ultricies. Praesent rutrum lacus sit amet sem convallis, ut interdum dolor vestibulum.</p>

  <p>Tum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In iaculis pharetra odio, sit amet consectetur elit facilisis ac. Praesent eget tristique ipsum. Donec malesuada bibendum lacinia. Praesent non purus sodales, pulvinar mi vitae, tincidunt leo. Phasellus vitae elit ut nisl semper fringilla id rutrum dolor. Donec a massa adipiscing, cursus risus vitae, porttitor tortor. Nullam sagittis est sapien, sit amet pharetra turpis imperdiet vel. Etiam sit amet ligula pretium, vulputate eros ac, bibendum velit. Aenean convallis ante purus, ac bibendum orci laoreet ac. Donec a convallis mauris. Nulla non lacus non ipsum pretium tempor. In hac habitasse platea dictumst. Aenean at ipsum vulputate, sagittis dui ut, pharetra neque. Nam eget sodales orci. Aliquam pharetra nunc at nisl pellentesque, nec fringilla enim iaculis.</p>
</div>

which is all exactly the same as show but i have replaced all the jquery selectors "$" with "jQuery".

The script loads in the eventlister 'scroll > window' like it should, but nothing visually occurs on page scroll (nav bar should stick to the top of the page as you scroll down). I have a feeling i have not enqueued it properly or something or perhaps called the right dependencies, but i do not understand why it loads in the page but does nothing.

my relavent functions snippet is:

function verdigris_script() {
// register your script location, dependencies and version
    wp_register_script('custom_js', get_template_directory_uri() . '/js/scripts.js', array('jquery'));
    //css
    //wp_enqueue_style('bootstrap', get_template_directory_uri() . '/css/bootstrap.min.css', array(), 'all');
    wp_enqueue_style('customstyle', get_template_directory_uri() . '/css/verdigris-style.css', array(), 'all');
    //js
    //wp_enqueue_script('bootstrapjs', get_template_directory_uri() . '/js/bootstrap.min.js', array(), true);
    wp_enqueue_script('custom_js');

}
add_action( 'wp_enqueue_scripts', 'verdigris_script');
MoxieProxy
  • 65
  • 7

2 Answers2

0

replace your scripts with

$(function($) {
var  mn = $(".main-nav");
    mns = "main-nav-scrolled";
    hdr = $('header').height();

$(window).scroll(function() {
  if( $(this).scrollTop() > hdr ) {
    mn.addClass(mns);
  } else {
    mn.removeClass(mns);
  }
});
})(jQuery)
Aram810
  • 619
  • 7
  • 21
  • Why? What does this solve? Does the OP have jQuery loaded? Are there errors in the console? This is a guess - at best - and you don't have enough info to provide a legit answer. – random_user_name Apr 10 '17 at 13:58
0

You need a document.ready function in your jQuery code.

$(document).ready(function(){

   // jQuery goes here...

});

or for short:

$(function(){

   // jQuery goes here...

});

Also if you need to test if your jQuery is working just try a console.log('hey is this working'); inside your document.ready function.

Hope this helps

StefanBob
  • 4,857
  • 2
  • 32
  • 38
  • 1
    This won't work. WP loads jQuery in no-conflict mode, so you cannot access the `$` directly - you need to access jQuery via `jQuery` - or use the no-conflict safe shorthand `jQuery(function($) { // $ is safe in here });` – random_user_name Apr 10 '17 at 13:54
  • how about: jQuery(document).ready(function(){ jQuery(window).scroll(function () { var mn = jQuery(".nav-bar"); if( jQuery(this).scrollTop() > 80 ) { mn.addClass("nav-bar-scrolled"); } else { mn.removeClass("nav-bar-scrolled"); } }); – MoxieProxy Apr 10 '17 at 14:07
  • Use @cale_b advice and do: jQuery(function($) { console.log("test"); }); – StefanBob Apr 10 '17 at 14:10
  • This returns test in the console log – MoxieProxy Apr 10 '17 at 14:19
  • Ok cool so your jQuery now works in wordpress. Now you can test if your scripts work. You can use the $ selector for your scripts as cale_b mentioned – StefanBob Apr 10 '17 at 14:24
  • yes, cale_b's comment is the answer. I have now got the script to work! thanks guys – MoxieProxy Apr 10 '17 at 14:51