全局$wpdb未通过函数调用显示正确的数据

时间:2019-04-14 作者:mimi

我有一个代码显示最近3次更新的页面或帖子。

当我将此代码添加到主题提要栏时,它工作得非常好。php文件。

<?php
 $today = current_time(\'mysql\', 1);
 $count = 3;
 if ( $recentposts = $wpdb->get_results("SELECT ID, post_title FROM $wpdb- 
 >posts WHERE post_status = \'publish\' AND (post_type = \'page\' OR post_type = 
 \'post\') AND post_modified_gmt < \'$today\' ORDER BY post_modified_gmt DESC 
 LIMIT $count")):
 ?>
 <h4><?php _e("Recent Updates"); ?></h4>
 <ul>
 <?php
 foreach ($recentposts as $post) {
 if ($post->post_title == \'\') $post->post_title = sprintf(__(\'Post #%s\'), 
 $post->ID);
 echo "<li><a href=\'".get_permalink($post->ID)."\'>";
 the_title();
 echo \'</a></li>\';
  }
  ?>
</ul>
<?php endif; ?>
但当我在主题函数上添加此代码时。php文件,并使用woody片段php代码在小部件中调用它。然后,它只显示当前页面作为最近更新的页面3次。以下是功能代码:

function iq_recent_update(){
 global $wpdb;
 $today = current_time(\'mysql\', 1);
 $count = 3;
 if ( $recentposts = $wpdb->get_results("SELECT ID, post_title FROM $wpdb- 
 >posts WHERE post_status = \'publish\' AND (post_type = \'page\' OR post_type = 
 \'post\') AND post_modified_gmt < \'$today\' ORDER BY post_modified_gmt DESC 
 LIMIT $count")):
 ?>
 <h4><?php _e("Recent Updates"); ?></h4>
 <ul>
 <?php
 foreach ($recentposts as $post) {
 if ($post->post_title == \'\') $post->post_title = sprintf(__(\'Post #%s\'), 
 $post->ID);
 echo "<li><a href=\'".get_permalink($post->ID)."\'>";
 the_title();
 echo \'</a></li>\';
  }
  ?>
</ul>
<?php endif; 
}
在woody php代码片段中,我将其称为

<?php iq_recent_update(); ?>
它只显示当前页面名称。为什么工作方式不同?我如何解决?

非常感谢。

1 个回复
最合适的回答,由SO网友:mimi 整理而成

使用@Jacob Peattie 建议,我已重新编码;它与功能配合得非常好。

/* Recent updated post & pages */
if ( ! function_exists( \'iq_recent_update\' ) ) :
function iq_recent_update() {
$orig_post = $post;
global $post;
$args=array(
        \'posts_per_page\' => 3,  
        \'orderby\'          => \'modified\',
        \'order\'            => \'DESC\',
        \'post_type\'        => array(\'post\', \'page\'),
         \'post_status\' => \'publish\'
);

$my_query = new wp_query( $args );
if( $my_query->have_posts() ) {

echo \'<h3>Recent updates</h3>\';
        echo "<ul>";
while( $my_query->have_posts() ) {
$my_query->the_post();?>
<li><a href="<? the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></li>
<?php
}
}
echo "</ul>";
$post = $orig_post;
wp_reset_query();
}
endif;

相关推荐

WPDB:如何获取自定义数据库表中字段的值

对于我的WordPress站点,我想在我的站点的数据库中的表的行(由用户ID确定)中回显列的值。此表是由插件创建的,因此无法通过用户元访问。我必须尝试从插件创建的表中获取值。对于本例,该值位于数据库的“plugintable”表中,列为“columnname”。如何根据用户ID与“ID”行的匹配来获取值?我是在其他在线资源的帮助下来到这里的,但我被困住了。<?php global $wpdb, $table_prefix; $user_ID = get_current