• Resolved A-minus

    (@a-minus)


    Hello! We just discovered a new issue with unchanged code in the child plugin. The child theme’s header.php picks a header based on page types or post ID’s, with the below sort of logic:

    <?php if ( is_home() ){
    
    		if ( function_exists( "easingsliderlite" ) ) {
    			easingsliderlite();
    			}
            }
    
     	else {
    		$header_image = get_header_image();
    
    			if ( is_404() ) {
            		$header_image = "https://emswcd.org/wp-content/uploads/2015/06/Header-404.jpg";
        		}
    			/*else if(is_singular('product') || mp_is_shop_page() ){
    				$header_image = "https://emswcd.org/wp-content/uploads/2015/06/Header-native-plants-h.jpg";
    			}*/
    			else if(is_search() ){
    				$header_image = "https://emswcd.org/wp-content/uploads/2015/06/Header-default.jpg";
    			}
    			else if(is_page(1) || in_array(1, $post->ancestors)){
    				$header_image = "https://emswcd.org/wp-content/uploads/2015/06/Header-default.jpg";
    			}	
    
    			else if(is_page(110) || in_array(110, $post->ancestors)){
    				$header_image = "https://emswcd.org/wp-content/uploads/2015/06/Header-default.jpg";
    			}

    The problem begins with the ...else if(is_page(1) || in_array(1, $post->ancestors)){
    and generates:

    Warning: in_array() expects parameter 2 to be array, null given in /home/content/11/12008011/html/wp-content/themes/twentytwelve-child/header.php on line 77
    
    Warning: in_array() expects parameter 2 to be array, null given in /home/content/11/12008011/html/wp-content/themes/twentytwelve-child/header.php on line 81

    and so on for each one after.

    Did something change in recent versions that would cause this conflict? The header has not changed in a long time, and this issue is brand new. If there is a new page type I can use in this if else, that might solve the issue. Let me know…
    Thanks!
    Alex

    https://wordpress.org/plugins/business-directory-plugin/

Viewing 9 replies - 1 through 9 (of 9 total)
  • Plugin Author Business Directory Plugin

    (@businessdirectoryplugin)

    Hi Alex,

    Sorry that you ran into issues here!

    Something has changed in BD–we did alter our CPT integration a bit and that may be triggering something in this logic unexpectedly.

    Let me have my developer look at this code and see what he says. I’ll report back shortly.

    Thread Starter A-minus

    (@a-minus)

    Great, thank you!

    Thread Starter A-minus

    (@a-minus)

    Edit: why is this post marked as resolved?? – post-edit: okay, thanks for the clarification :).

    If it is as simple as a new custom post type, perhaps just knowing what that type is would let me add a conditional to my header code above. It’s strange that where it breaks is on a page-ancestor condition…

    Plugin Author Business Directory Plugin

    (@businessdirectoryplugin)

    Hi A-minus,

    I mark the threads resolved once I respond to them. Most folks don’t mark their own stuff–but it doesn’t mean we’re ignoring you, or that we’re done–if you respond, we always respond. It’s just a housekeeping thing.

    We’re still looking into it…I promise, we’ll respond.

    Plugin Author Business Directory Plugin

    (@businessdirectoryplugin)

    Hi Alex,

    My developer responded today:

    If the pasted PHP is all there is, then the problem is clear: $post is not declared anywhere so PHP assumes it is NULL. He probably just needs to add global $post to the top of his code to make the warning go away.

    A valid question would be–why did this work before? Probably because either page with ID 1 or 110 is the main page for the directory, so is_page(1) or is_page(110) in one of the two if branches returned true even if you were browsing a category or viewing a listing (since everything was dispatched via the main page).
    Since 4.0 those checks don’t succeed so the second part of the conditional is executed (the in_array() call) and it receives an undefined $post variable, generating the warning.

    I’m not sure how the rest of the code looks or exactly what behavior the customer wants, but since he’s asked for details about the custom post type, we’ve always been a CPT but didn’t “report” to WP as that on the frontend.

    To better control things he might want to use functions like:

    <?php
    is_tax( WPBDP_CATEGORY_TAX ); // Returns true if you're browsing a directory category.
    is_tax( WPBDP_TAGS_TAX ); // Returns true if you're browsing a directory tag.
    is_singular( WPBDP_POST_TYPE ); // Returns true if you're seeing a listing.
    wpbdp_current_view(); // Is non-empty when looking at *any* directory page.

    Thread Starter A-minus

    (@a-minus)

    Thanks to you both! While setting global $post does not chase away the warnings, those is_tax(WPBDP…) conditionals fixed it.

    A valid question would be–why did this work before? Probably because either page with ID 1 or 110 is the main page for the directory, so is_page(1) or is_page(110) in one of the two if branches returned true even if you were browsing a category or viewing a listing (since everything was dispatched via the main page).

    It has worked for years before, for this and other plugins with CPTs. It all ran off the page the [businessdirectory] shortcode was inserted into, as you said, so that’s where this issue came up!

    One new question since I added those conditionals – the dynamic sidebar navigation no longer works as it did before. I’m wondering what code to use to echo categories or tags. If I do something like this:

    <?php if (is_tax( WPBDP_CATEGORY_TAX ) || is_tax( WPBDP_TAGS_TAX ) || is_singular( WPBDP_POST_TYPE ) ||wpbdp_current_view()) : ?>
    <ul class="sidePages"><li class="parentLink"><a href="http://emswcd-dev.net/alpha/tools/conservation-directory/"><em>←</em> Conservation Directory</a></li>
    <li class="current_page_item"><a href="#"><?php echo get_the_title(); ?></a></li>
    </ul>
    <?php endif; ?>

    It works for going back to the Directory home, which is what I always would like to do. However it echoes a result from the category instead of the category itself. If you have any suggestions here, I would appreciate it!

    Thread Starter A-minus

    (@a-minus)

    For a little more clarity on the last post, this is essentially what I’d use for new sidebar navigation text, with a placeholder for category/tag code.

    <?php if (is_tax( WPBDP_CATEGORY_TAX ) || is_tax( WPBDP_TAGS_TAX ) || is_singular( WPBDP_POST_TYPE ) ||wpbdp_current_view()) : ?>
    <ul class="sidePages"><li class="parentLink"><a href="http://emswcd-dev.net/alpha/tools/conservation-directory/"><em>←</em> Conservation Directory</a></li>
    <?php endif; ?>
    
    <?php if (is_tax( WPBDP_CATEGORY_TAX ) || is_tax( WPBDP_TAGS_TAX )) : ?>
    <li class="current_page_item"><a href="#">[Category/Tag code here]</a></li>
    </ul></li>
    
    <?php elseif (is_singular( WPBDP_POST_TYPE ) || wpbdp_current_view()) : ?>
    
    <li class="current_page_item"><a href="#"><?php echo get_the_title(); ?></a></li>
    </ul>
    <?php endif; ?>
    Plugin Author Business Directory Plugin

    (@businessdirectoryplugin)

    Let me ask him and see…

    Plugin Author Business Directory Plugin

    (@businessdirectoryplugin)

    OK, here’s what he said:

    get_the_title() doesn’t work anymore because it is used to retrieve the title of the current post. Previously, this was the “main page” so it “seemed” to work, but that’s no longer the case.

    I’m not 100% sure what Alex wants to do here, but if he needs the title of the current category (or tag) the following should work:

    $term = get_queried_object();
    echo $term->name; // Prints the category name.
Viewing 9 replies - 1 through 9 (of 9 total)
  • The topic ‘Header image logic’ is closed to new replies.