为什么同一个WordPress功能可以在一个站点上运行而不在另一个站点上运行?

时间:2019-09-08 17:35:24

标签: wordpress

好的,我有一个使用自定义主题的WordPress网站。

此主题包含一个短代码,该短代码旨在在侧栏中的文本小部件中使用,并且该短代码显示最新的帖子。默认为最后三个,但是您可以根据需要使用参数进行更改。

这是处理短代码的功能:

function wp_widget_recent_posts( $atts ){

  extract( shortcode_atts( array(
    'count' => 3,
  ), $atts ));

  ob_start();
    $arg = array(
      'post_type'         => 'post',
      'post_status'     => 'publish',
      'order'           => 'DESC',
      'orderby'         => 'date',
      'posts_per_page'  => $atts['count'],
    );
    $wp_query = new WP_Query($arg);
    if ( $wp_query->have_posts() ) : ?>
      <?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
        <?php get_template_part( 'partials/posts-loop-item' ); ?>
      <?php endwhile; ?>
    <?php endif; wp_reset_query();

  $result = ob_get_clean();
  return $result;

}
add_shortcode( 'recent_posts', 'wp_widget_recent_posts' );

这一切都可以在我的网站上正常工作。

但是,我有一个朋友正在使用相同的主题(并在相同的PHP版本上运行相同的WordPress版本),并且在他的网站上,当您询问最近的三篇文章时,实际上显示了六篇。 。 (他的网站上目前只有七个帖子。)

经过一番挖掘,我发现:

  1. 如果您要发表四个帖子,则会显示七个帖子。
  2. 如果您要发三个帖子,它会显示六个。
  3. 如果您要发两个帖子,它会显示五个。
  4. 如果您要一个帖子,它会显示四个。
  5. 如果您要求发帖为零,则仍然显示为六个。

好像在向函数传递的参数中添加了三个一样。

请注意,上述功能在两个站点上都是相同的。

进一步挖掘,我发现这是上述函数生成的MySQL调用:

从wp_posts中选择SQL_CALC_FOUND_ROWS wp_posts.ID,其中1 = 1 AND wp_posts.post_type ='post'AND(((wp_posts.post_status ='publish')))ORDER BY wp_posts.post_date DESC LIMIT 0,3

我以前从未见过SQL_CALC_FOUND_ROWS,但是由于它是由核心WordPress代码生成的(因为在主题代码中没有名为WP_Query的函数),我假设这都是正确的。

接下来我做的结果使我感到惊讶。

我想对上述功能进行一些小的更改,纯粹是确保使用了该功能的最新版本。 (我怀疑我对主题的functions.php文件所做的更改被忽略了。)

因此,我将Order参数从DESC更改为ASC。

当我这样做并刷新页面时,如预期的那样,只有3个帖子显示在侧栏中。

对此的MySQL调用如下:

从wp_posts中选择SQL_CALC_FOUND_ROWS wp_posts.ID,其中1 = 1 AND wp_posts.post_type ='post'AND(((wp_posts.post_status ='publish'))ORDER BY wp_posts.post_date ASC LIMIT 0,3

我现在迷路了-我完全不知道为什么:

  1. 此功能在我的网站(以及其他一些我已帮助网站所有者设置相同WordPress主题的网站)上有效。

  2. 为什么它在我朋友的站点上的帖子降序排列不起作用,但是对帖子的升序排列却起作用。

  3. 为什么要在shortcode参数中显示请求的帖子数,然后在其中添加三个。

有人知道下一步该怎么做吗?

0 个答案:

没有答案