• Resolved iwbyte

    (@iwbyte)


    I’m trying to implement the hiding of password-protected posts in the general blog page and only showing them on certain pages/categories.

    I’m trying to use the code here:

    https://codex.www.ads-software.com/Using_Password_Protection#Hiding_Password_Protected_Posts

    /**
     *  Function to hide protected posts
     *  https://codex.www.ads-software.com/Using_Password_Protection#Hiding_Password_Protected_Posts
    
    // Filter to hide protected posts
    function exclude_protected($where) {
    	global $wpdb;
    	return $where .= " AND {$wpdb->posts}.post_password = '' ";
    }
    
    // Decide where to display them
    function exclude_protected_action($query) {
    	if( !is_single() && !is_page() && !is_admin() ) {
    		add_filter( 'posts_where', 'exclude_protected' );
    	}
    }
    
    // Action to queue the filter at the right time
    add_action('pre_get_posts', 'exclude_protected_action');

    But there seems to be some conflict with WooSidebars such that when the plugin is enabled, no protected posts show up anywhere. Any ideas on where the conflict might be?

    https://www.ads-software.com/extend/plugins/woosidebars/

Viewing 5 replies - 1 through 5 (of 5 total)
  • Thread Starter iwbyte

    (@iwbyte)

    Wow, I just learned a whole bunch about wordpress…

    Still no answer, but its only tangentally related to woosidebars – it seems that woosidebars adds a new post_type, which is confusing my simplified exclude_protected_action function above.

    I would have thought that adding:

    $posttype = get_post_type( get_the_ID() );
    if( ($posttype == "post" && !is_single() && !is_page() && !is_admin() )

    would have fixed it, but now its firing all the time, even for monthly archive pages where I still don’t want the protected pages coming up.

    I guess more reading is in order, unless someone has a suggestion?

    Plugin Author Matt Cohen

    (@mattyza)

    Hi iwbyte,

    Thanks for your query. ??

    You’d need to include a check in your “where” modification to ensure the post type isn’t “sidebar”, to hide the sidebars.

    Alternatively, a simpler option is to add && is_main_query() to your conditions. That way, the filter would only apply to the main query on the page. ??

    I hope this clarifies your query. If not, please let me know. ??

    Thanks and regards,
    Matty.

    Thread Starter iwbyte

    (@iwbyte)

    Thanks for chiming in!

    Well, I swapped out $posttype == "post" with !is_main_query() but no difference – the protected posts still come up in the monthly archive pages.

    I also tried adding: !is_category(array('catslug2','catslug2')) but that seems to have no effect either – protected posts show up in all categories, not just the ones listed.

    I’m ok with this for now, but it would be nice if I could figure out how whatever this plugin is doing is affecting the query.

    Plugin Author Matt Cohen

    (@mattyza)

    Hi iwbyte,

    Thanks for your feedback on this.

    Please try the following code snippet instead: https://gist.github.com/7f3bc3a41c63b0cc1424

    This ensures that the filter is only applied on the main query and if it’s the default homepage or an archive view.

    Please advise if this produces the desired result. ??

    Thanks and regards,
    Matty.

    Thread Starter iwbyte

    (@iwbyte)

    Matty,

    Thanks so much for replying. Sorry for being so lame and not applying your fix.

    Unfortunately, there’s no change in the site behavior with your code. I’ve been away from this project for a few months, so I’m going to delve in deeper before I give up completely – Ideally, I’d like to have certain categories excluded from the hiding, and then hide the password protected posts elsewhere.

    Thanks for all the help – I’ll start a new , more informed, post if I decide to jump in again.

Viewing 5 replies - 1 through 5 (of 5 total)
  • The topic ‘Woosidebars and protected posts’ is closed to new replies.