web-dev-qa-db-fra.com

the_excerpt - veut modifier la sortie protégée par mot de passe

Je cherche à modifier la sortie de the_excerpt quand aucun extrait n'est spécifié et que la publication est protégée par un mot de passe. Je peux déjà modifier le formulaire protégé par mot de passe comme je le veux, mais the_excerpt envoie "Il n’existe aucun extrait car il s’agit d’un message protégé".

Le code pour cela réside dans wp-includes/post-template.php:

function get_the_excerpt( $deprecated = '' ) {
    if ( !empty( $deprecated ) )
        _deprecated_argument( __FUNCTION__, '2.3' );

    global $post;
    $output = $post->post_excerpt;
    if ( post_password_required($post) ) {
        $output = __('There is no excerpt because this is a protected post.');
        return $output;
    }

    return apply_filters('get_the_excerpt', $output);
}

Une solution simple serait simplement de changer le code et de passer à autre chose, mais comme vous le savez tous, la modification des fichiers de base mérite plus qu'une gifle! Quelqu'un peut-il m'aider à comprendre comment modifier ce code dans mon fichier functions.php?

Merci!

EDIT: Voici le code que j'ai essayé, mais il ne fonctionne pas :(

add_filter('get_the_excerpt', 'improved_get_the_excerpt');
function improved_get_the_excerpt( $deprecated = '' ) {
    if ( !empty( $deprecated ) )
        _deprecated_argument( __FUNCTION__, '2.3' );

    global $post;
    $output = $post->post_excerpt;
    if ( post_password_required($post) ) {
        $output = __('This is some test content.');
        return $output;
    }
}

Je suis complètement nouveau dans le concept des filtres, des actions, des crochets, etc. J'apprécie l'aide!

1
cmegown

Un moyen simple serait de vérifier la sortie dans un modèle (ou un petit wrapper):

$excerpt = get_the_excerpt();

if( 'There is no excerpt because this is a protected post.' == $excerpt ) {

    // stuff
}
else {

    echo $excerpt;
}

Une autre solution consisterait à utiliser le filtre gettext (utilisé dans __()) pour capturer et modifier cette phrase.

2
Rarst

Vous voudriez regarder dans add_filter ().

Voici le lien vers le codex: http://codex.wordpress.org/Function_Reference/add_filter

Voici un autre article auquel je me réfère de temps en temps: http://otto42.com/ak

-À votre santé

Edit: Passage d'un paramètre à des fonctions de filtrage et d'action

1
David

get_the_excerpt() n'est pas une fonction enfichable, vous ne pouvez donc pas l'écraser en nommant simplement une fonction de la même manière. Comme il n’ya pas d’accroche entre la vérification de l’état de protection et return du texte pour que l’extrait ne puisse pas être affiché, vous devrez effectuer le filtrage une fois que the_excerpt() aura été obtenu en utilisant une méthode suggérée par @Rarst dans sa solution.

Il existe un moyen (simple) de contourner ce problème, vous pouvez utiliser les fonctionnalités i18n pour remplacer le texte généré par la fonction, mais c'est une mauvaise solution car il utilise les fonctionnalités i18n d'une manière totalement non intentionnelle. à utiliser.

1
mor7ifer