diff --git a/blocks_fonctions.php b/blocks_fonctions.php
index 1bf4d740a03fffbf0289af2b116c350651eef83f..24f5c54ce3818f2f403f2e95ae0684d687018c37 100644
--- a/blocks_fonctions.php
+++ b/blocks_fonctions.php
@@ -66,29 +66,35 @@ function balise_GENERER_BLOCK_dist($p) {
 }
 
 function _block_charger_block($id_bloc) {
-	// TODO : vérifier statut
-	$infos = sql_fetsel(
+	$retour = '';
+	$where = ['b.id_bloc = ' . (int)$id_bloc];
+	if (!test_espace_prive()) {
+		$where[] = 'b.statut = ' . sql_quote('publie');
+	}
+	if ($infos = sql_fetsel(
 		'b.valeurs, bt.saisies, bt.identifiant',
 		'spip_blocs_types bt join spip_blocs b using(id_blocs_type)',
-		'b.id_bloc = ' . (int)$id_bloc
-	);
-
-	$contexte = [
-		'id_bloc' => $id_bloc,
-	];
-	// transmettre les valeurs saisies dans le bloc au squelette
-	$saisies_bloc_type = blocks_deserialize($infos['saisies']);
-	if ($valeurs_saisies = blocks_deserialize($infos['valeurs'])) {
-		include_spip('inc/saisies_lister');
-		$saisies_par_nom = saisies_lister_par_nom($saisies_bloc_type);
-		foreach ($saisies_par_nom as $nom => $saisie) {
-			$contexte[$nom] = $valeurs_saisies[$nom];
+		$where
+	)) {
+		$contexte = [
+			'id_bloc' => $id_bloc,
+		];
+		// transmettre les valeurs saisies dans le bloc au squelette
+		$saisies_bloc_type = blocks_deserialize($infos['saisies']);
+		if ($valeurs_saisies = blocks_deserialize($infos['valeurs'])) {
+			include_spip('inc/saisies_lister');
+			$saisies_par_nom = saisies_lister_par_nom($saisies_bloc_type);
+			foreach ($saisies_par_nom as $nom => $saisie) {
+				$contexte[$nom] = $valeurs_saisies[$nom];
+			}
 		}
-	}
 
-	$squelette = blocks_trouver_squelette($infos['identifiant']);
+		$squelette = blocks_trouver_squelette($infos['identifiant']);
 
-	return recuperer_fond($squelette, $contexte);
+		$retour = recuperer_fond($squelette, $contexte);
+	}
+
+	return $retour;
 }
 
 /**
@@ -129,15 +135,27 @@ function balise_GENERER_BLOCKS_dist($p) {
 
 function _block_charger_blocks($objet, $id_objet) {
 	$retour = '';
-	$blocs = objet_trouver_liens(['bloc' => '*'], [$objet => $id_objet]);
-	// TODO : vérifier statuts et rangs_liens
+	$where = [
+		'bl.objet = ' . sql_quote($objet),
+		'bl.id_objet = ' . (int)$id_objet,
+	];
+	if (!test_espace_prive()) {
+		$where[] = 'b.statut = ' . sql_quote('publie');
+	}
+	$blocs = sql_allfetsel(
+		'b.id_bloc',
+		'spip_blocs_liens bl join spip_blocs b using(id_bloc)',
+		$where,
+		'',
+		'bl.rang_lien'
+	);
 	foreach ($blocs as $bloc) {
 		$retour .= _block_charger_block($bloc['id_bloc']);
 	}
+
 	return $retour;
 }
 
-
 /**
  * Générer le titre d'un bloc
  * composé de son type et du titre de l'objet auquel il est lié