web-dev-qa-db-fra.com

Tester le titre du message dans la déclaration 'if/else' ne renvoie aucun contenu

Je teste pour un certain poste fixe sur une page à propos, je devinais que le meilleur moyen était de tester le titre du post (?).

Voici mon code, qu'est-ce qui ne va pas?

<?php
if (is_page()) {
  $cat=get_cat_ID($post->post_title);
  $posts = get_posts ("cat=$cat&showposts=35");

  if ($posts) {
    foreach ($posts as $post):
      setup_postdata($post); ?>
        <div class="clear"></div>
            <h3><?php the_title(); ?></h3>
        <div class="clear"></div>

<?php    if ($post->post_title('skillset')) {
            echo '<div class="content">';
                the_content('');
            echo '</div>'; 
    }
        else{
        the_content('');
        }
                endforeach;
  }
}
?>
2
Max Chandler

Tout d’abord, $post est l’une des variables globales principales du noyau WordPress et ne doit donc pas être touché ni réinitialisé . après votre boucle foreach.

Utiliser setup_postdata() vous permet d’utiliser des balises de modèle telles que vous êtes faire dans l'extrait de code ci-dessus avec the_title(). Elle, ou la boucle dans laquelle il est utilisé, devrait cependant toujours être suivie de son compagnon wp_reset_postdata() .

De plus, $post est un objet . Les objets sont des occurrences de classes contenant des propriétés et/ou des méthodes, les équivalents OOP de variables et de fonctions.

En essayant de tester le titre du post comme vous l'avez fait,

if($post->post_title('skillset'))

vous avez traité post_title comme s’il s’agissait d’une méthode et que vous pouviez alimenter le titre en question sous forme d’argument et renvoyer un booléen. Cependant, il s'agit d'une propriété et en tant que tel contient une valeur à laquelle vous pouvez accéder - et c'est tout.

Cette valeur doit ensuite être testée par rapport à une autre valeur. Par conséquent

if( 'skillset' === $post->post_title ) {
    // your conditional operation
}

serait un test de travail pour le titre.

Cette ligne est essentiellement la réponse à la question dans votre titre. Puisque vous avez cependant demandé ce qui pourrait ne pas être correct avec votre code, l'argument showposts est également déconseillé depuis un certain temps. Utilisez numberposts à la place.

Revenons également au point initial sur l'utilisation de $post. Si, au lieu des balises de modèle, vous référencez directement les propriétés, il ne serait pas nécessaire de remplacer le $post global.

$wpse67413_posts = get_posts();

foreach( $wpse67413_posts as $wpse67413_post ) {
     echo '<h3>' . $wpse67413_post->post_title . '</h3>';
}

Cela fonctionnerait aussi bien sans toucher au global. C'est juste pour des raisons d'exhaustivité.

Et comme note de côté, pourquoi voudriez-vous utiliser autant de balises PHP d'ouverture et de fermeture dans un espace aussi restreint? Une question plutôt rhétorique: cela n’a aucun sens.

Enfin, êtes-vous sûr de vouloir faire ceci:

$cat=get_cat_ID($post->post_title);

? Cela n'a de sens que si vous souhaitez récupérer les messages d'une catégorie nommée exactement de la même manière que le titre de la page sur laquelle se trouve le visiteur. En supposant que la réponse soit positive, voici la correction complète de votre extrait de code:

global $post;

if( is_page() ) {
    $wpse67413_posts = get_posts( array(
        cat => get_cat_ID($post->post_title),
        numberposts => 35
    ));

    if( $wpse67413_posts ) {
        foreach ( $wpse67413_posts as $post ) {
            setup_postdata($post);

            echo '<div class="clear"></div>' .
                '<h3>' get_the_title() . '</h3>' .
                '<div class="clear"></div>';

            if( 'skillset' === $post->post_title ) {
                echo '<div class="content">' . get_the_content() . '</div>'; 
            } else {
                the_content();
            }
        }
    }

    wp_reset_postdata();
}
2
Johannes Pille

Le meilleur moyen serait de rechercher une identité, pas un titre! Alors, votre si serait:

if ($post->ID === 123)

où 123 est l'ID du message que vous souhaitez "filtrer".

0
Miha Rekar