web-dev-qa-db-ja.com

WooCommerce Storefrontの子テーマsingle.php「関連記事」の修正に問題がある

過去1週間に投稿された1つのカテゴリからの投稿を表示します。私はquery_posts()を使ってこれを行いましたが、それが悪い考えであることについて読んだことがあります。

そのため、私は自分で変更してfunctions.phpに配置できる関数を作成してから、直接または子テーマのsingle.php単一ブログ投稿テンプレートのアクションを通じて呼び出すことを試みました。

私の機能はこれまでに機能したことがなく、私が何をしているのか理解するのに役立つものを望んでいました。

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();

}

上記が私のfunctions.phpに入ったら、私のWordpressサイトは空白のページに変わります。

1つの(悲しい)そして卑劣な追加の質問:この機能が私のページを空白にしない場合、それを呼び出すための最良の方法は何ですか?これをsingle.phpのメインのif have_the_posts()クエリに含めたいのですか、それともそのクエリの外側で呼び出しますか?

私はこのタイプの機能を可能にするプラグインがあることを知っていますが、私はたくさんのフォーマットとさらなるカスタマイズをするつもりです。

EDIT

以下の答えで提供された助けのおかげで、私のコードは今うまくいき、このように見えます:

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

白い画面が表示されるのは、 "$ string"が定義されていないからです。あなたはそれを連結しただけです。

将来、wp_config.phpファイルでwp_debugをtrueにすることで関数を作成するときにエラーを見つけることができます。

これはうまくいくはずのコードです。

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;
}

私はあなたの関数にもより実用的な名前を付けようとしますが、あなたがその関数を呼び出す準備ができたらあなたは(phpファイルで)それをすることができます:

echo new_function();

更新コード:

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