修改WooCommerce Storefront子主题Single.php“Related Posts”时遇到问题

时间:2018-01-10 作者:ScragglyCouch

我想显示过去一周发布的某个类别的帖子。我使用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网站变成了空白页。

一个(可悲的)又一个狡猾的问题:一旦这个函数不能让我的页面变为空白,那么调用它的最佳方式是什么?我想把这个放在主要位置吗if have_the_posts() 在中查询single.php (例如)还是应该在该查询之外调用它?

我知道有一些插件支持这种类型的功能,但我将进行一系列格式化和进一步定制。

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 个回复
最合适的回答,由SO网友:rudtek 整理而成

您得到白色屏幕的原因是您从未定义过“$字符串”。您只连接了它。

将来,通过在wp\\U配置中将wp\\U debug设置为true,您可以在创建函数时发现错误。php文件。

下面是应该工作的代码:

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

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post