Tu t'y connais en php ?

Alors, j’ai une petite énigme pour toi !

On souhaite apporter un peu de contenu extérieur au site, relayer ce qui s’écrit/enregistre ailleurs sur Internet à propos des jeux crowdfundés. On a mis un petit test sur la home page. Mais on aimerait le faire bien et, donc, faire que cliquer sur l’article en question renvoie vers le site source (et pas seulement un bout d’article sur cwowd).

En l’état, cliquer sur ces articles en home ouvre bien l’article source. Mais on apprécierait beaucoup qu’il l’ouvre dans un nouvel onglet. Et, là, on bloque.

La fonction qu’on utilise actuellement :

[scode]//* Redirect posts to original URL
add_action( ‹ template_redirect ›, ‹ nabm_original_post_redirect › );
function nabm_original_post_redirect() {
if ( ! is_singular() ) {
return;
}
if ( $url = get_post_meta( get_the_ID(), ‹ rss_pi_source_url ›, true ) ) {
wp_redirect( esc_url_raw( $url ), 301 );
exit;
}
}[/scode]

On utilise un plugin qui récupère le flux RSS puis transforme en article. Mais celui-ci n’est pas prévu pour une agrégation « propre » et le petit bout de code redirige donc l’article vers sa source. Pas de bol, wp_redirect n’est pas prévu pour ouvrir en blank…

 

Effectivement avec un redirect ça ne pourra pas marcher.

Tu devrais essayer d’avoir le vrai lien vers l’article plutôt, en s’inspirant de ça par exemple. Ce qui donnerait un truc comme :

1
2
3
4
5
6
7
8
9
10
11
add_filter( 'post_link', 'nabm_external_permalink', 10, 2 );

function nabm_external_permalink( $link, $post )
{
$meta = get_post_meta( $post->ID, ‹ rss_pi_source_url ›, true );
$url = esc_url( filter_var( $meta, FILTER_VALIDATE_URL ) );

return $url ? $url : $link;
}

Et si ça fonctionne, ça simplifie la tache pour l'ouverture dans un nouvel onglet (exemple).

Alors, d’abord : l’ouverture dans une nouvelle fenêtre/onglet, c’est le Mal©®™ ! Tu oblige l’utilisateur à perdre son historique, impossible de revenir en arrière, les moins habitués voient un machin inattendu s’ouvrir parfois dans une nouvelle fenêtre et pas un onglet, l’habitué qui veut vraiment l’info et partir a des manipulations en plus à faire, tu tombe peut être dans une fenêtre qui a été coupée de ses éléments d’UI par la page précédente, etc etc etc…

C’est un débat qui a fait rage il y a 10 ans, l’accessibilité s’est imposée et dorénavant le target _blank est devenu l’exception et non la norme. Si quelqu’un veut ouvrir dans un nouvel onglet, il le fait, c’est un acte réfléchi. Je l’utilise tout le temps le pomme/ctrl-clic, mais c’est mon choix, uniquement sur les pages que je veux lire en parallele.

'fin bref, si vraiment tu veux faire chier les gens, ouvrir dans un nouvel onglet, ce n’est pas au niveau du serveur que ça se décide. C’est au niveau du client (le navigateur), par un target="_blank" (raaaah, je me sens sale, je l’ai écrit !) sur un lien (balise a).

Après, te concernant … je crois que le problème est vu à l’envers : la home a un bloc « vu ailleurs », avec des articles qui ont une url locale et un post_meta « rss_pi_source_url » qui les différencie. Et tu as fait un lien « normal » depuis la home vers la page locale, laquelle page locale redirige vers la source distante. Tu charge deux pages (la home + la page de redirection) sans pouvoir faire ce que tu veux (la-dite abomination d’ouverture d’une nouvelle fenêtre, pouah !). Si au niveau de ton home.php, dans la boucle d’affichage de ces vu ailleurs, tu remplace le lien interne par le lien externe (du site distant), et voilà.

J’ai plus le code typique d’une loop sur un post_meta à portée immédiate de main, mais tu remplace le bout qui génère le lien ( the_permalink() ?) par un truc du genre :

<?php echo '{{a href="' . $url . '">'. $title .'{{/a>' ?>
?

edit : raaaah, je me bats avec wp qui transforme mon code html dans mon post, faut remplacer {{ par ce qu’il faut. Et les guillemets français par des guillemets doubles et l’apostrophe française par l’apostrophe anglaise. Les filtres wp, c’est chiantissime pour copier-coller du code, en fait !

tu as la balise [ scode ] si tu veux. Ou le preformated, doit aussi oublier les stupides filtres…

 

sinon, je veux bien que ce soit mal d’ouvrir dans un autre onglet. Mais c’est tout aussi mal d’ouvrir un nouveau site, surtout quand ce n’est pas absolument flagrant qu’on envoie « ailleurs ».

 

Et la marge de manœuvre est assez limité puisqu’on passe par un plugin d’agrégation qui récupère les flux RSS pour les transformer en article. On n’a donc pas le choix de l’adresse qu’il utilise et on biaise avec un redirect. Il semble que les utilisateurs d’agregation préfèrent faire chier le monde en créant une adresse locale avec un Read more, je ne sais trop pourquoi :wink:

 

Ceci dit, faut que je regarde le code d’@etig auquel je n’ai rien compris, ça fait peut–être le taffe :smiley: Bien l’impression que oui, reste encore à décrypter le truc. Et trouver où le caser… tu m’as tout perturbé avec le lien qui reco de mettre dans le footer.php :smiley:

[quote quote=168537] Effectivement avec un redirect ça ne pourra pas marcher. Tu devrais essayer d’avoir le vrai lien vers l’article plutôt, en s’inspirant de ça par exemple. Ce qui donnerait un truc comme :

1
2
3
4
5
6
7
8
9
10
11
add_filter( ‘post_link’, ‘nabm_external_permalink’, 10, 2 );
function nabm_external_permalink( $link, $post ) { $meta = get_post_meta( $post->ID, ‘rss_pi_source_url’, true ); $url = esc_url( filter_var( $meta, FILTER_VALIDATE_URL ) ); return $url ? $url : $link; }
Et si ça fonctionne, ça simplifie la tache pour l’ouverture dans un nouvel onglet (exemple). [/quote] alors, le second lien fonctionne (le .js pour un auto _blank). Donc, déjà, un grand merci parce que j'avais tenté deux plugins qui fonctionnaient très médiocrement (et ça me faisait bien chier de toute façon d'ajouter encore un plugin pour un truc qui ne devait nécessiter que quelques lignes de code). On vient déjà de gagner un temps fou à ne pas repasser derrière chaque lien KS (notamment) pour cocher le _blank... (ouais c'est mal. Mais c'est pas grave^^).

 

Par contre, « loupé » pour le code (via function.php du child), pas d’effets sur les « articles syndiqués » en une qui ouvrent alors sur cwowd comme un article « normal ». Ce qui n’est pas vraiment l’effet voulu…

Pourtant, ça devrai faire l’affaire ce qu’il t’a linké.

Est-ce que la boucle des syndiqués sur la home est du code « à la main », ou une option du plugin qui a été cliqué ? Si c’est la première option, ce sera plus simple à caler finement que de toucher aux filtres… même si là en lisant le code, si rss_pi_source_url est une url valide, le filtre devrai te donner une bonne url ?

C’est peut-être un post custom, essaye de remplacer post_link par post_type_link dans le code que je t’ai mis.

nope, pas de différence et ouverture sur cwowd

OK, je vais attendre avant de donner mon verdict, il semble que cela agisse au moment de l’import/création de l’article.