web-dev-qa-db-fra.com

Une déclaration conditionnelle peut-elle s'appliquer à une partie d'une limace?

Existe-t-il un moyen (et si oui, "comment?") D'appliquer une condition à une page/publication pour laquelle le slug contient un mot spécifique.

Dans le cas de l'exemple du Codex:

is_single( 'beef-stew' )

La condition s'appliquera toujours si la limace contient du "boeuf" plutôt que du "ragoût de boeuf".

UPDATE: En réponse à une demande de contexte ...

J'ai un menu de navigation qui utilise une instruction conditionnelle (exemple ci-dessous) pour appliquer une classe CSS à un élément lorsque c'est la page affichée.

 <?php if (is_single('mon')) { echo " class=\"current\""; }?>

Dans l'exemple ci-dessus, 'mon' est 'lundi', avec similaire pour les autres jours d'un programme hebdomadaire. En l'ajoutant à un modèle, il peut être utilisé pour n'importe quel jour, à condition que je mette un slug approprié ... Un exemple consiste à utiliser "mon" au lieu de "lundi 4 avril".

Je souhaite appliquer la condition à une partie seulement du slug, économisant ainsi le temps nécessaire pour modifier manuellement le slug avant de le sauvegarder ... et supprimer la situation de dysfonctionnement si j'oublie de le faire.

3
glvr

WordPress n'a pas de condition pour les tests de sous-chaîne, mais vous pouvez le faire en utilisant la fonction intégrée PHP: strpos()

global $post;

if( false !== strpos( $post->post_name, 'beef' ) ) {
    // Do Things
}

Ce qui précède retourne vrai si beef est trouvé quelque part dans le slug de publication.

4
Howdy_McGee

De la même manière que @Howdy_McGee, nous pourrions essayer de construire une fonction d'assistance:

/**
 * @param $s String 
 * @return bool
 */
function queried_post_name_contains_wpse247782( $s )
{
    $obj = get_queried_object();

    return     $obj instanceof \WP_Post // Make sure it's a post object
            && false !== strpos( $obj->post_name, $s ); // post name contains it
}

et l'utiliser comme:

if( is_single() && queried_post_name_contains_wpse247782( 'beef' ) )
{
    // ...
}

J'espère que vous pourrez l'étendre davantage à vos besoins!

2
birgire