为什么切换到博客会停止工作?

时间:2010-11-29 作者:Jason Rhodes

我正在使用WordPress 3.0的多站点功能,我建立了一个站点网络,在那里我在主站点的首页上显示一个来自其中一个子站点的随机帖子。我通过使用switch_to_blog 旧WPMU函数列表中的函数。

直到昨天我还可以调用一个函数switch_to_blog, 创建一个数组,将博客名称、帖子详细信息、帖子缩略图等添加到数组中,然后使用restore_current_blog 跳回主博客的上下文。然后我用这个数组来回应我抓到的帖子所需要的东西。它工作得很好。

突然,当我打电话的时候switch_to_blog 然后我从那个街区打电话bloginfo() 只是为了测试它,它仍然呼应顶级博客的名称,而不是切换到博客的名称。

由于随机bug,该函数是否已完全弃用且无法运行?任何人都有任何见解或想法可以绕过它,或者我需要编写一个自定义$wpdb->get_results(); 查询以绕过此问题?

谢谢

3 个回复
最合适的回答,由SO网友:Jason Rhodes 整理而成

看来,切换到博客可能太不可预测,无法用于主要网站设计。这是我第一次尝试基于SQL的解决方案。

function get_intro_post($blogid, $thumb_size=\'\') {

  global $wpdb, $post;

  // Get the system defined table prefix
  $prefix = $wpdb->prefix;

  // Create a full table prefix by combining the system prefix with the blogid
  $tbl = $prefix . $blogid;

  // First query selects posts with the \'Introduction\' category
  $sql = "SELECT `ID` FROM {$tbl}_posts as p";
  $sql .= " JOIN {$tbl}_term_relationships tr ON p.ID = tr.object_id";
  $sql .= " JOIN {$tbl}_terms t ON tr.term_taxonomy_id = t.term_id";
  $sql .= " WHERE t.name = \'Introduction\'";

  // Only want/expect one result row, so use get_row()
  $intro = $wpdb->get_row($sql);
  $postid = $intro->ID;

  // Second query joins the postmeta table to itself so that I can find
  // the row whose post_id matches the _thumbnail_id, found in meta_value, 
  // for the post whose post_id matches the one I found in the previous query.
  $sql = "SELECT p2.meta_key, p2.meta_value FROM  `{$tbl}_postmeta` p1";
  $sql .=   " JOIN  `{$tbl}_postmeta` p2 ON p1.meta_value = p2.post_id";
  $sql .=   " WHERE p1.meta_key =  \'_thumbnail_id\'";
  $sql .=   " AND p1.post_id =  \'{$postid}\'";
  $sql .=   " LIMIT 0 , 30";

  // Expecting 2 result rows, so use get_results()
  $thumb_meta = $wpdb->get_results($sql);

  // Set $src to FALSE as the default
  $src = FALSE;

  // Make sure the query returned results
  if(!empty($thumb_meta)) {
    foreach($thumb_meta as $row) {
        // We just want to find the row where meta_key is the attached file
        // and then set our $src var to that value, which is the image path
        if ($row->meta_key == "_wp_attached_file") $src = $row->meta_value;
    }
  }

  // If we found an image path above, I\'ll append the rest of the path to the front
  if($src) { $src = "/wp-content/blogs.dir/{$blogid}/files/{$src}"; }

  // Handy core function to grab the blogname of another network\'s blog, by ID
  $blogname = get_blog_details( $blogid )->blogname;

  // Make an associative array holding the elements we need, 
  // some pulled from the global $post context
  $p = array(
    \'title\' => get_the_title(),
    \'content\' => get_the_content(),
    \'excerpt\' => get_the_excerpt(),
    \'permalink\' => get_permalink(),
    \'blogname\' => $blogname,
    \'thumbnail\' => $src
  );

  // Return an object with the post details mentioned above
  return (object) $p;
}

SO网友:Denis de Bernardy

存在多个与缓存相关的switch\\u to\\u blog()问题:

等待3.2以获得完全的可靠性。。。(如果然后…)

SO网友:andrea_r

我很想知道昨天发生了什么事是否安装了新插件?升级?

是的,该函数已被弃用,但仍在用于插件,而且很容易不可预测。

结束

相关推荐

$wpdb->日期时间列的INSERT()和值?

我有一个带有DATETIME列的自定义表。我有一个添加记录的功能;我想添加一个$expires 此函数的参数,该参数可以保存unix时间戳,指出记录应在何时过期。我想使用$wpdb->insert() 填充此列。到目前为止,我还找不到WordPress的便捷功能来将时间戳转换为“YYYY-MM-DD HH:MM:SS”格式。有这样一个内置的吗,还是我应该使用$wpdb->prepare(), 或者可能是第三种选择?