web-dev-qa-db-fra.com

Plusieurs classes de corps CSS pour des pages spécifiques ID - est-ce possible?

Voici mon défi ...

J'ai 52 pages qui nécessitent une image d'arrière-plan pleine largeur qui sera rendue via un style .css.

Donc, ce que je saurai, ce sont tous les numéros d’identification de page. Je crois que le code ci-dessous est une manière ordonnée de faire ce que je cherche à réaliser.

Ma question est, plutôt que d'avoir 52 instances du code ci-dessous, est-il possible de simplement placer tous les ID de page et $classes de 'css' séparés par des virgules?

add_filter('body_class','wpsites_specific_page_body_class');
/**
* @author Brad Dalton - WP Sites
*
* @link http://wpsites.net/web-design/style-images-custom-body-class/
*/
function wpsites_specific_page_body_class($classes) {
 if(is_page('007') ) {
    $classes[] = 'demo-class';
return $classes;
   }
}

Merci pour toutes les directions.

1
henry

Je voudrais envisager de le rendre plus flexible en marquant les pages en question avec une taxinomie post méta ou personnalisée. De cette façon, vous n'avez pas besoin de changer un code PHP pour choisir les pages qui doivent avoir un aspect personnalisé.

Voici un exemple, si nous marquons les pages avec le champ personnalisé wpse-layout avec la valeur 1 (en supposant qu'il puisse y avoir plus d'options de disposition):

add_filter( 'body_class', function( $classes )
{
    // Only target pages
    if( ! is_page() )
        return $classes;

    // Get the 'wpse_layout' post meta value for the current page
    $layout = get_post_meta( get_queried_object_id(), 'wpse_layout', true );

    if( empty( $layout ) )
        return $classes;

    // Inject the 'wpse-layout-1' body class, 
    // if the custom field 'wpse-layout' has the value 1
    $classes[] = sprintf( 'wpse-layout-%d', $layout );

    return $classes;

} );

Cela pourrait être ajusté de différentes manières, par ex. avec une interface utilisateur personnalisée.

2
birgire

J'irais certainement avec la réponse de Birgir, c'est la bonne approche. Mais depuis que vous avez demandé, ce que vous voulez faire peut être fait en utilisant un tableau.

Stockez vos identifiants de page dans un tableau, puis effectuez une opération conditionnelle:

$ids = array( '1', '23', '53', '99' ... '1001' );
if( is_page( $ids ) ) {
    // Your code here
}

La fonction is_page() accepte un entier, une chaîne ou un tableau.

0
Jack Johansson

Essaye ça.

function wpsites_specific_page_body_class($classes) {
    global $post;
    $posts = [7=>'demo-class',8=>'another-class']
     if (array_key_exists($post->ID,$posts))
        $classes[] = $posts[$post->ID];
        return $classes;
     }
 }

Vous pouvez ajouter un nombre quelconque de publications dans le tableau $ posts. Il définira la classe assignée à l'identifiant de poste.

0
Tom Webb

d'abord obtenir tous les identifiant de page cliquez ici pour plus d'informations

add_filter('body_class','wpsites_specific_page_body_class');
/**
* @author Brad Dalton - WP Sites
*
* @link http://wpsites.net/web-design/style-images-custom-body-class/
*/
function wpsites_specific_page_body_class($classes) {
  $page_ids= get_all_page_ids();
 if(is_page($page_ids) ) {
    $classes[] = 'demo-class';
return $classes;
   }
}
0
Kanon Chowdhury