web-dev-qa-db-fra.com

Masquer le préfixe privé sur une page spécifique

Essayer de masquer de manière conditionnelle le préfixe "privé" devant le titre de la page sur une page spécifique nommée "membres" uniquement.

J'ai utilisé ce code dans functions.php pour masquer le préfixe sur toutes les pages.

function title_format($content) {
return '%s';
}

add_filter('private_title_format', 'title_format');
add_filter('protected_title_format', 'title_format');

J'ai essayé de m'attacher à cela avec if si_page ("membres") de différentes manières, mais jusqu'à présent, le seul résultat que j'ai réussi à obtenir est des erreurs fatales.

2
nicklas bryntesson

Cela a fonctionné pour moi. L'une des clés est que vous devez vous assurer que le contenu reste inchangé s'il ne remplit pas la condition.

function title_format($content) {
    if (is_page('members')) :
        return '%s';
    else :
        return $content;
    endif;
}

add_filter('private_title_format', 'title_format');
add_filter('protected_title_format', 'title_format');

Cela ne s'appliquera toutefois qu'à la page avec un slug de "membres", et il semblerait que vous souhaitiez afficher une liste de titres de page sur la page Membres et y supprimer le préfixe. Est-ce le seul endroit? Une fois que le membre a cliqué sur le lien, souhaitez-vous toujours omettre les préfixes Privé: et Protégé: du titre de la page spécifique?

Si tel est le cas, une approche consiste à déplacer toutes les pages Protected: en tant qu'enfants de la page parent. Utilisez le code ci-dessus, mais modifiez la condition pour déterminer si les pages sont des enfants de la page des membres.

Une autre approche consiste à filtrer le titre sur le modèle de page lorsque vous l'enroulez sur la page. Une fonction à laquelle je me suis replié csstricks :

function the_title_trim($title) {

    $title = attribute_escape($title);

    $findthese = array(
        '#Protected:#',
        '#Private:#'
    );

    $replacewith = array(
        '', // What to replace "Protected:" with
        '' // What to replace "Private:" with
    );

    $title = preg_replace($findthese, $replacewith, $title);
    return $title;
}

Et dans votre modèle de page, vous afficheriez le titre comme suit:

echo the_title_trim(get_the_title());

Cela ne s'appliquerait qu'à ce modèle de page particulier sur la page Membres, à condition que vous créiez un modèle personnalisé pour cette page.

J'espère que cela vous donne quelques idées sur la façon de l'aborder.

1
Jeremy Ross