web-dev-qa-db-fra.com

Supprimer des classes supplémentaires du titre du post

Je souhaite supprimer les balises, catégories de cours de Post Titles de mon blog WordPress. Sur l'interface, Wordpress génère des classes supplémentaires pour chaque titre d'article.

Par exemple, cet article a ces classes de titre d'article "category-tips-guides" "tag-indian-army", telles qu'elles apparaissent dans l'image suivante:

enter image description here

J'ai essayé l'extrait de code suivant pour supprimer des classes supplémentaires ( partagées sur cette page ) et cela fonctionne:

function lsmwp_remove_postclasses($classes, $class, $post_id) {
$classes = array_diff( $classes, array(
    'hentry',
    'type-' . get_post_type($post_id),
    'status-' . get_post_status($post_id),
) );
return $classes;
add_filter('post_class', 'lsmwp_remove_postclasses', 10, 3);

Mais le problème avec ce code est qu'il ne supprime pas les classes Tag, Category comme je le souhaite.

Quelques références à post_class:

  1. https://codex.wordpress.org/Function_Reference/post_class
  2. https://core.trac.wordpress.org/browser/tags/4.9.7/src/wp-includes/post-template.php#L0
1
Narender Chopra

Essaye ça.

// **** Remove unwanted classes
function remove_classes($classes, $class, $post_id)
{
    // Array that holds the undesired classes
    $removeClasses = array(
        'category-',
        'tag-'
    );

    // Array to store the new class names
    $newClasses = array();
    foreach ($classes as $_class)
    {
        // Iterate through the array of undesired classes and
        // check if the current $_class name starts with the
        // undesired class name
        $hasClass = FALSE;
        foreach ($removeClasses as $_removeClass)
        {
            if (strpos($_class, $_removeClass) === 0)
            {
                $hasClass = TRUE;
                break;
            }
        }

        // If $_class does not contain an undesired class name,
        // add it to the array of new class names.
        if (!$hasClass)
        {
            $newClasses[] = $_class;
        }
    }

    // Return the array of new class names
    return ($newClasses);
}
add_filter('post_class', 'remove_classes', 10, 3);

Ce filtre déclare un tableau de noms de classe non désirés ($removeClasses). Développez-le avec les noms de classe que vous ne voulez pas avoir.

Ensuite, la fonction parcourt le tableau de classes passé ($classes) et vérifie si elle contient les classes que vous avez définies dans le tableau $removeClasses. Sinon, il sera ajouté à un nouveau tableau ($newClasses). Si oui, il le passera.

Enfin, il retourne le nouveau tableau $newClasses.

Fondamentalement, il trie les classes que vous ne voulez pas. Et au lieu de manipuler le tableau $classes passé, il en crée un nouveau avec uniquement les bonnes classes et le renvoie à la place.

Je ne l'ai pas testé cependant. Je n'ai pas d'installation WordPress disponible pour le moment. Il se peut que cela ne fonctionne pas, car post_class pourrait ne pas être le bon filtre.

0
Mario Werner

Bien entendu, vous devrez également supprimer tous les éléments de $classes qui commencent par tag- et category-. La difficulté est qu’autre chose qu’avec type- et status-, il peut y avoir plusieurs instances.

Donc, vous devrez parcourir le tableau et supprimer toutes les instances commençant par ces chaînes:

foreach ($classes as $class) {
  if (substr ($class, 0, 4) === "tag-") $class = '';
  if (substr ($class, 0, 8) === "category-") $class = '';
  }
0
cjbj