web-dev-qa-db-fra.com

Appliquer le filtre the_content pour des types de publication spécifiques uniquement

J'essaie de modifier un extrait de code trouvé ici pour un site web wordpress: http://support.membermouse.com/support/discussions/topics/9000007386

Voici le code:

<?php
add_filter( 'the_content', 'restrict_mm_access' );

function restrict_mm_access($content) {

if(is_super_admin()){
    return $content;
}

$moreLink = '<span id="more-' . get_the_ID() . '"></span>';

$contentData = explode( $moreLink, $content );

if ( count( $contentData ) > 1 ) {
    $return = $contentData[0];
    $return .= "[MM_Member_Decision isMember='false']";
    $return .= '<div id="access-restricted-box">
                    <h3>You have to be a member to access this content.</h3>
                    <h4>Already a Member?</h4>
                    <a href="/login/?redirect_to=' . get_the_permalink() . '" class="button">Log In for Access</a>
                    <h4>Not a Member Yet?</h4>
                    <a href="/join/" class="button">Register Now</a>
                </div>';
    $return .= "[/MM_Member_Decision]";
    $return .= "[MM_Member_Decision membershipId='2']";
    $return .= $contentData[1];
    $return .= "[/MM_Member_Decision]";

    return $return;
} else {
    return $content;
}
}
?>

J'utilise le plugin d'adhésion Member Mouse pour protéger les publications personnalisées; ils ne sont donc affichés que pour les membres payés. Nos billets de blog sont disponibles au public.

L'extrait ci-dessus fonctionne parfaitement pour protéger les publications de blogues - ce que je ne veux pas. Je souhaite que deux types de publication personnalisés soient protégés (Outils et Articles) et que les publications de blog soient affichées à tout le monde.

Je reconnais que les types de publication personnalisés ne sont pas des publications - il y a donc un problème. Je ne sais tout simplement pas comment modifier l'extrait pour qu'il fonctionne.

Des idées?

3
user92240

Chaque fois que the_content est appelé, il existe un objet global WP_Post. Vous pouvez donc examiner cela pour trouver son type de message:

if ( ! in_array( get_post()->post_type, [ 'tool', 'article' ] ) )
    return $content;
1
fuxia