wordpress - 为什么相同的 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),并且在他的网站上,当您询问最近的三个帖子时,它实际上显示了六个。(现在他的网站上只有七个帖子。)
经过一番挖掘,我发现:
- 如果您要求四个帖子,它显示七个。
- 如果您要求三个帖子,则显示为六个。
- 如果您要求两个帖子,它显示五个。
- 如果您要求一个帖子,它会显示四个。
- 如果您要求零个帖子,它仍然显示六个。
就好像它向您传递给函数的参数添加了三个。
需要注意的是,上述功能在两个站点上是相同的。
进一步挖掘,我发现这是上述函数生成的 MySQL 调用:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 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。
当我这样做并刷新页面时,侧边栏中只显示了三个帖子,正如预期的那样。
MySQL 对此的调用如下:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND ((wp_posts.post_status = 'publish')) ORDER BY wp_posts.post_date ASC LIMIT 0, 3
我现在迷路了——我完全不知道为什么:
此功能适用于我的网站(以及我帮助网站所有者设置相同 WordPress 主题的其他一些网站。
为什么它不适用于我朋友的网站,帖子按降序排列,但对帖子按升序排列。
为什么它似乎采用短代码参数中请求的帖子数量并添加三个。
有人对下一步看哪里有任何指示吗?
解决方案
推荐阅读
- python - 在 all() 函数中,“for”如何评估为真或假?
- c++ - 给定 64 位进程的 PID,如何从 32 位进程获取其可执行路径?
- sass - Nextjs如何添加antd
- android - npx react-native start 和 npx react-native run-android 太慢了
- python - 在 Windows 上安装 Turi Create 时出错
- node.js - 如何通过公共 IP 地址访问我的 node.js 服务器?
- python - 使用 ON DUPLICATE KEY UPDATE 时获取“键 'PRIMARY' 的重复条目 'foo'”
- python - 用文件创建新目录而不复制或覆盖旧目录?(Python)
- javascript - 在 if / else 语句(Javascript)中获取“无法读取未定义的属性“计数”
- hive - HiveQL 基于日期的行、列之间的差异