Head & Footer Code - Version 1.0.6

Version Description

  • Fix: PHP Notice: Trying to get property of non-object in \wp-content\plugins\head-footer-code\inc\front.php on line 41.
  • Fix: Overwrite footer content for post/page if post/page template after content have another WP Loop query (like recent posts WP Widget in RHS sidebar).
  • Optimize: Avoid reading post meta if not singular or post type not enabled
  • Tested in Multisite environment (main and other network websites) on WordPress v4.5-alpha-36504 and theme Twenty Sixteen v1.2-alpha.
Download this release

Release Info

Developer urkekg
Plugin Icon Head & Footer Code
Version 1.0.6
Comparing to
See all releases

Code changes from version 1.0.5 to 1.0.6

Files changed (6) hide show
  1. head-footer-code.php +6 -6
  2. inc/front.php +64 -24
  3. inc/helpers.php +20 -6
  4. inc/settings.php +1 -1
  5. readme.txt +10 -4
  6. uninstall.php +1 -1
head-footer-code.php CHANGED
@@ -1,18 +1,18 @@
1
  <?php
2
  /**
3
- * @link http://urosevic.net
4
  * @since 1.0.0
5
  * @package Head_Footer_Code
6
  *
7
  * @wordpress-plugin
8
  * Plugin Name: Head & Footer Code
9
- * Plugin URI: http://urosevic.net/wordpress/plugins/head-footer-code/
10
- * Description: Easy add site-wide and/or article specific custom code to head and/or footer sections (before the &lt;/head&gt; or &lt;/body&gt;) by hooking to <code>wp_head</code> and <code>wp_footer</code>.
11
- * Version: 1.0.5
12
  * Author: Aleksandar Urosevic
13
- * Author URI: http://urosevic.net
14
  * License: GPL-2.0+
15
- * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
16
  * Text Domain: head-footer-code
17
  * Domain Path: /languages
18
  */
1
  <?php
2
  /**
3
+ * @link https://urosevic.net
4
  * @since 1.0.0
5
  * @package Head_Footer_Code
6
  *
7
  * @wordpress-plugin
8
  * Plugin Name: Head & Footer Code
9
+ * Plugin URI: https://urosevic.net/wordpress/plugins/head-footer-code/
10
+ * Description: Easy add site-wide and/or article specific custom code to head and/or footer sections (before the &lt;/head&gt; or &lt;/body&gt;) by hooking to <code>wp_head</code> and <code>wp_footer</code>. Support Multisite environment.
11
+ * Version: 1.0.6
12
  * Author: Aleksandar Urosevic
13
+ * Author URI: https://urosevic.net
14
  * License: GPL-2.0+
15
+ * License URI: https://www.gnu.org/licenses/gpl-2.0.txt
16
  * Text Domain: head-footer-code
17
  * Domain Path: /languages
18
  */
inc/front.php CHANGED
@@ -6,6 +6,8 @@ $auhfc_defaults = auhfc_defaults();
6
  if ( empty( $auhfc_defaults['priority'] ) ) {
7
  $auhfc_defaults['priority'] = 10;
8
  }
 
 
9
  add_action( 'wp_head', 'auhfc_wp_head', $auhfc_defaults['priority'] );
10
  add_action( 'wp_footer', 'auhfc_wp_footer', $auhfc_defaults['priority'] );
11
 
@@ -14,18 +16,37 @@ add_action( 'wp_footer', 'auhfc_wp_footer', $auhfc_defaults['priority'] );
14
  */
15
  function auhfc_wp_head() {
16
 
 
 
 
 
 
 
 
 
17
  // Get variables to test
18
  $auhfc_settings = auhfc_defaults();
19
- $auhfc_meta = auhfc_get_meta( 'head' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
 
21
  // If no code to inject, simple exit
22
  if ( empty( $auhfc_settings['head'] ) && empty( $auhfc_meta ) ) {
23
  return;
24
  }
25
 
26
- global $post;
27
- $behavior = auhfc_get_meta( 'behavior' );
28
-
29
  // Prepare code output.
30
  $out = '';
31
 
@@ -34,27 +55,27 @@ function auhfc_wp_head() {
34
  ! empty( $auhfc_settings['head'] ) &&
35
  (
36
  'replace' !== $behavior ||
37
- ( 'replace' == $behavior && ! in_array( $post->post_type, $auhfc_settings['post_types'] ) ) ||
38
- ( 'replace' == $behavior && in_array( $post->post_type, $auhfc_settings['post_types'] ) && empty( $auhfc_meta ) )
39
  )
40
  ) {
41
- if ( WP_DEBUG ) { $out .= "<!-- Head & Footer Code: Site-wide head section start ({$post->post_type}) -->\n"; }
42
  $out .= $auhfc_settings['head'];
43
- if ( WP_DEBUG ) { $out .= "<!-- Head & Footer Code: Site-wide head section end ({$post->post_type}) -->\n"; }
44
  }
45
 
46
  // Inject article specific head code if post_type is allowed
47
- if ( ! empty( $auhfc_meta ) && in_array( $post->post_type, $auhfc_settings['post_types'] ) ) {
48
- if ( WP_DEBUG ) { $out .= "<!-- Head & Footer Code: Article specific head section start ({$post->post_type}) -->\n"; }
49
  $out .= $auhfc_meta;
50
- if ( WP_DEBUG ) { $out .= "<!-- Head & Footer Code: Article specific head section end ({$post->post_type}) -->\n"; }
51
  }
52
 
53
  // Print prepared code.
54
  echo $out;
55
 
56
  // Free some memory.
57
- unset( $out, $auhfc_settings, $auhfc_meta, $behavior );
58
 
59
  } // END function auhfc_wp_head()
60
 
@@ -63,18 +84,37 @@ function auhfc_wp_head() {
63
  */
64
  function auhfc_wp_footer() {
65
 
 
 
 
 
 
 
 
 
66
  // Get variables to test
67
  $auhfc_settings = auhfc_defaults();
68
- $auhfc_meta = auhfc_get_meta( 'footer' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
 
70
  // If no code to inject, simple exit
71
  if ( empty( $auhfc_settings['footer'] ) && empty( $auhfc_meta ) ) {
72
  return;
73
  }
74
 
75
- global $post;
76
- $behavior = auhfc_get_meta( 'behavior' );
77
-
78
  // Prepare code output
79
  $out = '';
80
 
@@ -83,26 +123,26 @@ function auhfc_wp_footer() {
83
  ! empty( $auhfc_settings['footer'] ) &&
84
  (
85
  'replace' !== $behavior ||
86
- ( 'replace' == $behavior && ! in_array( $post->post_type, $auhfc_settings['post_types'] ) ) ||
87
- ( 'replace' == $behavior && in_array( $post->post_type, $auhfc_settings['post_types'] ) && empty( $auhfc_meta ) )
88
  )
89
  ) {
90
- if ( WP_DEBUG ) { $out .= "<!-- Head & Footer Code: Site-wide footer section start ({$post->post_type}) -->\n"; }
91
  $out .= $auhfc_settings['footer'];
92
- if ( WP_DEBUG ) { $out .= "<!-- Head & Footer Code: Site-wide footer section end ({$post->post_type}) -->\n"; }
93
  }
94
 
95
  // Inject article specific head code if post_type is allowed
96
- if ( ! empty( $auhfc_meta ) && in_array( $post->post_type, $auhfc_settings['post_types'] ) ) {
97
- if ( WP_DEBUG ) { $out .= "<!-- Head & Footer Code: Article specific footer section start ({$post->post_type}) -->\n"; }
98
  $out .= trim( $auhfc_meta );
99
- if ( WP_DEBUG ) { $out .= "<!-- Head & Footer Code: Article specific footer section end ({$post->post_type}) -->\n"; }
100
  }
101
 
102
  // Print prepared code.
103
  echo $out;
104
 
105
  // Free some memory.
106
- unset( $out, $auhfc_settings, $auhfc_meta, $behavior );
107
 
108
  } // END function auhfc_wp_footer()
6
  if ( empty( $auhfc_defaults['priority'] ) ) {
7
  $auhfc_defaults['priority'] = 10;
8
  }
9
+
10
+ // Define actions for HEAD and FOOTER
11
  add_action( 'wp_head', 'auhfc_wp_head', $auhfc_defaults['priority'] );
12
  add_action( 'wp_footer', 'auhfc_wp_footer', $auhfc_defaults['priority'] );
13
 
16
  */
17
  function auhfc_wp_head() {
18
 
19
+ // Get post type
20
+ if ( is_singular() ) {
21
+ global $wp_the_query;
22
+ $auhfc_post_type = $wp_the_query->get_queried_object()->post_type;
23
+ } else {
24
+ $auhfc_post_type = 'not singular';
25
+ }
26
+
27
  // Get variables to test
28
  $auhfc_settings = auhfc_defaults();
29
+
30
+ // Get meta for post only if it's singular
31
+ if ( 'not singular' !== $auhfc_post_type && in_array( $auhfc_post_type, $auhfc_settings['post_types'] ) ) {
32
+ $auhfc_meta = auhfc_get_meta( 'head' );
33
+ $behavior = auhfc_get_meta( 'behavior' );
34
+ if ( WP_DEBUG ) {
35
+ $dbg_set = "(type: {$auhfc_post_type}; bahavior: {$behavior})";
36
+ }
37
+ } else {
38
+ $auhfc_meta = '';
39
+ $behavior = '';
40
+ if ( WP_DEBUG ) {
41
+ $dbg_set = "({$auhfc_post_type})";
42
+ }
43
+ }
44
 
45
  // If no code to inject, simple exit
46
  if ( empty( $auhfc_settings['head'] ) && empty( $auhfc_meta ) ) {
47
  return;
48
  }
49
 
 
 
 
50
  // Prepare code output.
51
  $out = '';
52
 
55
  ! empty( $auhfc_settings['head'] ) &&
56
  (
57
  'replace' !== $behavior ||
58
+ ( 'replace' == $behavior && ! in_array( $auhfc_post_type, $auhfc_settings['post_types'] ) ) ||
59
+ ( 'replace' == $behavior && in_array( $auhfc_post_type, $auhfc_settings['post_types'] ) && empty( $auhfc_meta ) )
60
  )
61
  ) {
62
+ if ( WP_DEBUG ) { $out .= "<!-- Head & Footer Code: Site-wide head section start {$dbg_set} -->\n"; }
63
  $out .= $auhfc_settings['head'];
64
+ if ( WP_DEBUG ) { $out .= "<!-- Head & Footer Code: Site-wide head section end {$dbg_set} -->\n"; }
65
  }
66
 
67
  // Inject article specific head code if post_type is allowed
68
+ if ( ! empty( $auhfc_meta ) && in_array( $auhfc_post_type, $auhfc_settings['post_types'] ) ) {
69
+ if ( WP_DEBUG ) { $out .= "<!-- Head & Footer Code: Article specific head section start {$dbg_set} -->\n"; }
70
  $out .= $auhfc_meta;
71
+ if ( WP_DEBUG ) { $out .= "<!-- Head & Footer Code: Article specific head section end {$dbg_set} -->\n"; }
72
  }
73
 
74
  // Print prepared code.
75
  echo $out;
76
 
77
  // Free some memory.
78
+ unset( $auhfc_post_type, $auhfc_settings, $auhfc_meta, $behavior, $out );
79
 
80
  } // END function auhfc_wp_head()
81
 
84
  */
85
  function auhfc_wp_footer() {
86
 
87
+ // Get post type
88
+ if ( is_singular() ) {
89
+ global $wp_the_query;
90
+ $auhfc_post_type = $wp_the_query->get_queried_object()->post_type;
91
+ } else {
92
+ $auhfc_post_type = 'not singular';
93
+ }
94
+
95
  // Get variables to test
96
  $auhfc_settings = auhfc_defaults();
97
+
98
+ // Get meta for post only if it's singular
99
+ if ( 'not singular' !== $auhfc_post_type && in_array( $auhfc_post_type, $auhfc_settings['post_types'] ) ) {
100
+ $auhfc_meta = auhfc_get_meta( 'footer' );
101
+ $behavior = auhfc_get_meta( 'behavior' );
102
+ if ( WP_DEBUG ) {
103
+ $dbg_set = "(type: {$auhfc_post_type}; bahavior: {$behavior})";
104
+ }
105
+ } else {
106
+ $auhfc_meta = '';
107
+ $behavior = '';
108
+ if ( WP_DEBUG ) {
109
+ $dbg_set = "({$auhfc_post_type})";
110
+ }
111
+ }
112
 
113
  // If no code to inject, simple exit
114
  if ( empty( $auhfc_settings['footer'] ) && empty( $auhfc_meta ) ) {
115
  return;
116
  }
117
 
 
 
 
118
  // Prepare code output
119
  $out = '';
120
 
123
  ! empty( $auhfc_settings['footer'] ) &&
124
  (
125
  'replace' !== $behavior ||
126
+ ( 'replace' == $behavior && ! in_array( $auhfc_post_type, $auhfc_settings['post_types'] ) ) ||
127
+ ( 'replace' == $behavior && in_array( $auhfc_post_type, $auhfc_settings['post_types'] ) && empty( $auhfc_meta ) )
128
  )
129
  ) {
130
+ if ( WP_DEBUG ) { $out .= "<!-- Head & Footer Code: Site-wide footer section start {$dbg_set} -->\n"; }
131
  $out .= $auhfc_settings['footer'];
132
+ if ( WP_DEBUG ) { $out .= "<!-- Head & Footer Code: Site-wide footer section end {$dbg_set} -->\n"; }
133
  }
134
 
135
  // Inject article specific head code if post_type is allowed
136
+ if ( ! empty( $auhfc_meta ) && in_array( $auhfc_post_type, $auhfc_settings['post_types'] ) ) {
137
+ if ( WP_DEBUG ) { $out .= "<!-- Head & Footer Code: Article specific footer section start {$dbg_set} -->\n"; }
138
  $out .= trim( $auhfc_meta );
139
+ if ( WP_DEBUG ) { $out .= "<!-- Head & Footer Code: Article specific footer section end {$dbg_set} -->\n"; }
140
  }
141
 
142
  // Print prepared code.
143
  echo $out;
144
 
145
  // Free some memory.
146
+ unset( $auhfc_post_type, $auhfc_settings, $auhfc_meta, $behavior, $out );
147
 
148
  } // END function auhfc_wp_footer()
inc/helpers.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * Provide global defaults
5
  * @return array Arary of defined global values
@@ -9,7 +8,7 @@ function auhfc_defaults() {
9
  'head' => '',
10
  'footer' => '',
11
  'priority' => 10,
12
- 'post_types' => array(), // array( 'post', 'page' ),
13
  );
14
  $auhfc_settings = get_option( 'auhfc_settings', $defaults );
15
  $auhfc_settings = wp_parse_args( $auhfc_settings, $defaults );
@@ -27,14 +26,29 @@ function auhfc_get_meta( $field_name = '' ) {
27
  return false;
28
  }
29
 
30
- global $post, $auhfc_post_meta;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
 
32
- // If $post has not an object, return false
33
- if ( empty( $post ) || ! is_object( $post ) ) {
34
  return false;
35
  }
36
 
37
- $field = get_post_meta( $post->ID, '_auhfc', true );
38
 
39
  if ( ! empty( $field ) && is_array( $field ) && ! empty( $field[ $field_name ] ) ) {
40
  return stripslashes_deep( $field[ $field_name ] );
1
  <?php
 
2
  /**
3
  * Provide global defaults
4
  * @return array Arary of defined global values
8
  'head' => '',
9
  'footer' => '',
10
  'priority' => 10,
11
+ 'post_types' => array(),
12
  );
13
  $auhfc_settings = get_option( 'auhfc_settings', $defaults );
14
  $auhfc_settings = wp_parse_args( $auhfc_settings, $defaults );
26
  return false;
27
  }
28
 
29
+ if ( is_admin() ) {
30
+ global $post;
31
+
32
+ // If $post has not an object, return false
33
+ if ( empty( $post ) || ! is_object( $post ) ) {
34
+ return false;
35
+ }
36
+
37
+ $post_id = $post->ID;
38
+ } else {
39
+ if ( is_singular() ) {
40
+ global $wp_the_query;
41
+ $post_id = $wp_the_query->get_queried_object_id();
42
+ } else {
43
+ $post_id = false;
44
+ }
45
+ }
46
 
47
+ if ( empty( $post_id ) ) {
 
48
  return false;
49
  }
50
 
51
+ $field = get_post_meta( $post_id, '_auhfc', true );
52
 
53
  if ( ! empty( $field ) && is_array( $field ) && ! empty( $field[ $field_name ] ) ) {
54
  return stripslashes_deep( $field[ $field_name ] );
inc/settings.php CHANGED
@@ -279,7 +279,7 @@ function auhfc_add_plugin_meta_links( $links, $file ) {
279
  __( 'Support' )
280
  ),
281
  sprintf(
282
- '<a href="http://urosevic.net/wordpress/donate/?donate_for=head-footer-code" target="_blank">%s</a>',
283
  __( 'Donate' )
284
  ),
285
  )
279
  __( 'Support' )
280
  ),
281
  sprintf(
282
+ '<a href="https://urosevic.net/wordpress/donate/?donate_for=head-footer-code" target="_blank">%s</a>',
283
  __( 'Donate' )
284
  ),
285
  )
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
  === Head & Footer Code ===
2
  Contributors: urkekg
3
- Donate link: http://urosevic.net/wordpress/donate/?donate_for=head-footer-code
4
  Tags: wp_head, wp_footer, head footer code, custom head script, custom footer script, google analytics, pixel tracking, tracking code, javascript, scripts, site verification, css
5
  Requires at least: 3.9
6
- Tested up to: 4.4
7
- Stable tag: 1.0.5
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -24,7 +24,7 @@ Please, consider to vote for this plugin. When you vote for broken, be so kind a
24
 
25
  **I need your support**
26
 
27
- It is very hard to continue development and support for this and my other free plugisn without contributions from users like you. If you enjoy using Head &amp; Footer Code and find it useful, please consider [making a donation](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=8RDRQXPV6YB98). Your donation will help encourage and support the plugin's continued development and better user support.
28
 
29
  **Features**
30
 
@@ -37,6 +37,7 @@ It is very hard to continue development and support for this and my other free p
37
  * Choose should article specific head/footer code be appended to site-wide code, or will replace site-wide code
38
  * Site-wide section located under **Tools** > **Head & Footer Code**
39
  * If you have enabled WP_DEBUG constant in `wp-config.php`, you'll see site-wide and article specific entries in page source code wrapped to comments.
 
40
 
41
  General settings, including HEAD, FOOTER global code and priority, have been saved to WordPress option `auhfc_settings`.
42
  Each post/page/custom post type specific HEAD and FOOTER code have been saved to post meta `_auhfc`.
@@ -84,6 +85,11 @@ Because all other similar plugins could not satisfy my requirements. In general,
84
  Initial release of new plugin developed by Aleksandar Urosevic.
85
 
86
  == Changelog ==
 
 
 
 
 
87
 
88
  = 1.0.5 =
89
  * Enhance: Add uninstall routine to make some housekeeping on plugin removal.
1
  === Head & Footer Code ===
2
  Contributors: urkekg
3
+ Donate link: https://urosevic.net/wordpress/donate/?donate_for=head-footer-code
4
  Tags: wp_head, wp_footer, head footer code, custom head script, custom footer script, google analytics, pixel tracking, tracking code, javascript, scripts, site verification, css
5
  Requires at least: 3.9
6
+ Tested up to: 4.5
7
+ Stable tag: 1.0.6
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
24
 
25
  **I need your support**
26
 
27
+ It is very hard to continue development and support for this and my other free plugisn without contributions from users like you. If you enjoy using Head &amp; Footer Code and find it useful, please consider [making a donation](https://urosevic.net/wordpress/donate/?donate_for=head-footer-code). Your donation will help encourage and support the plugin's continued development and better user support.
28
 
29
  **Features**
30
 
37
  * Choose should article specific head/footer code be appended to site-wide code, or will replace site-wide code
38
  * Site-wide section located under **Tools** > **Head & Footer Code**
39
  * If you have enabled WP_DEBUG constant in `wp-config.php`, you'll see site-wide and article specific entries in page source code wrapped to comments.
40
+ * Support [Multisite](https://codex.wordpress.org/Create_A_Network) environment.
41
 
42
  General settings, including HEAD, FOOTER global code and priority, have been saved to WordPress option `auhfc_settings`.
43
  Each post/page/custom post type specific HEAD and FOOTER code have been saved to post meta `_auhfc`.
85
  Initial release of new plugin developed by Aleksandar Urosevic.
86
 
87
  == Changelog ==
88
+ = 1.0.6 =
89
+ * Fix: `PHP Notice: Trying to get property of non-object in \wp-content\plugins\head-footer-code\inc\front.php on line 41`.
90
+ * Fix: Overwrite footer content for post/page if post/page template after content have another WP Loop query (like recent posts WP Widget in RHS sidebar).
91
+ * Optimize: Avoid reading post meta if not singular or post type not enabled
92
+ * Tested in Multisite environment (main and other network websites) on WordPress v4.5-alpha-36504 and theme Twenty Sixteen v1.2-alpha.
93
 
94
  = 1.0.5 =
95
  * Enhance: Add uninstall routine to make some housekeeping on plugin removal.
uninstall.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * @link http://urosevic.net
4
  * @since 1.0.5
5
  * @package Head_Footer_Code
6
  */
1
  <?php
2
  /**
3
+ * @link https://urosevic.net
4
  * @since 1.0.5
5
  * @package Head_Footer_Code
6
  */