web-dev-qa-db-fra.com

Avoir des problèmes avec le thème enfant WooCommerce Storefront single.php "modification liée" modification

J'aimerais afficher les messages d'une catégorie qui ont été publiés la semaine dernière. J'ai fait cela en utilisant query_posts() mais j'ai lu à propos de quelle mauvaise idée il s'agit.

J'ai donc essayé de créer une fonction que je peux modifier et insérer dans mon functions.php, puis appeler directement ou par le biais d'une action du modèle de publication de blog unique single.php pour mon thème enfant.

Ma fonction n'a jamais fonctionné et espérait de l'aide pour comprendre ce que je faisais mal.

function new_function() {
//Arguments
$args = array(
                            'post_type' => array( 'post' ),
                            'category_name' => 'classifieds',
                            'post_status' => array( 'publish' ),
                            'date_query' => array( 'after' => '1 week ago' ),
);
//Query
$new_query = new WP_Query( $args );

if ( $new_query->have_posts() ) {
        $string .= '<ul>';
        while ( $new_query->have_posts() ) {
            $new_query->the_post();
            $string .= '<li>';
            $string .= '<li><a href="' . get_the_permalink() .'" rel="bookmark">' . get_the_title() .'</a></li>';
        } else {
        }
}
$string .= '</ul>'
return $string;
wp_reset_postdata();

}

Une fois que ce qui précède est entré dans mon functions.php, mon site Wordpress se transforme en pages vierges.

Une question supplémentaire (triste) et sournoise: une fois que cette fonction ne rend pas mes pages vierges, quel est le meilleur moyen de l'invoquer? Est-ce que je veux ceci dans la requête principale if have_the_posts() dans single.php (par exemple) ou dois-je l'invoquer en dehors de cette requête?

Je sais qu'il existe des plugins qui permettent ce type de fonctionnalité, mais je vais faire un tas de formatage et de personnalisation plus poussée.

EDIT

Grâce à l'aide fournie dans la réponse ci-dessous, mon code fonctionne maintenant et ressemble à ceci:

function classified_stream() {
    //Arguments: posts, in classifieds category, that are published, and from the past week
    $new_args = array(
                    'post_type' => array( 'post' ),
                    'post_status' => 'publish',
                    'category_name' => 'classified',
                    'date_query' => array( 'after' => '1 week ago' ),
    );
    //Query
    $new_query = new WP_Query( $new_args ); 
    //Trouble shooting with print_r - I realized I called the wrong category in an earlier version of function.
    //print_r($new_query);

    if ( $new_query->have_posts() ) :
            while ( $new_query->have_posts() ) : $new_query->the_post();
                echo '<p><a href="' . get_the_permalink() .'" rel="bookmark">' . get_the_title() .'</a></p>';
    endwhile;
    endif;      
    wp_reset_postdata();
}
add_action( 'storefront_page_after', 'classified_stream',     20 );
1
ScragglyCouch

La raison pour laquelle vous obtenez un écran blanc est que vous n'avez jamais défini "$ string". Vous l'avez seulement concaténé.

À l'avenir, vous pourrez trouver vos erreurs lors de la création de fonctions en définissant wp_debug sur true dans votre fichier wp_config.php.

Voici le code qui devrait fonctionner:

function new_function() {
  //Arguments: posts, in classifieds category, that are published, and from the past week
  $args = array(
    'post_type' => array( 'post' ),
    'category_name' => 'classifieds',
    'post_status' => array( 'publish' ),
    'date_query' => array( 'after' => '1 week ago' ),
  );
  //Query
  $new_query = new WP_Query( $args );

  if ( $new_query->have_posts() ) {
        $string = '<ul>';
        while ( $new_query->have_posts() ) {
            $new_query->the_post();
            $string .= '<li>';
            $string .= '<li><a href="' . get_the_permalink() .'" rel="bookmark">' . get_the_title() .'</a></li>';
        } else {
        }
  }
  wp_reset_postdata();
  $string .= '</ul>'
  return $string;
}

J'essaierais de donner à votre fonction un nom plus pratique également, mais lorsque vous êtes prêt à appeler la fonction, vous pouvez le faire en (dans un fichier php):

echo new_function();

CODE MIS À JOUR:

function new_function() {
  //Arguments: posts, in classifieds category, that are published, and from the past week
  $args = array(
    'post_type' => array( 'post' ),
    'category_name' => 'classifieds',
    'post_status' => array( 'publish' ),
    'date_query' => array( 'after' => '1 week ago' ),
  );
  //Query
  $new_query = new WP_Query( $args );
  $string = '';
  if ( $new_query->have_posts() ) {
        $string = '<ul>';
        while ( $new_query->have_posts() ) :
            $new_query->the_post();
            $string .= '<li>';
            $string .= '<li><a href="' . get_the_permalink() .'" rel="bookmark">' . get_the_title() .'</a></li>';
        endwhile;
        wp_reset_postdata();
  }
  $string .= '</ul>'
  return $string;
}
0
rudtek