Si je télécharge une image avec le nom de fichier 8.jpg
, le lien permanent devient alors http://www.example.com/8
- ce que je ne veux vraiment pas. Comment puis-je faire en sorte que les pièces jointes utilisent leur type mime comme base pour l'URL? http://example.com/image/8
?
add_action('init', function(){
add_rewrite_endpoint( 'media', EP_PERMALINK | EP_ATTACHMENT| EP_PAGES );
flush_rewrite_rules(true);
} );
Je ne suis pas vraiment sûr du fonctionnement des terminaux, mais je peux transformer /media/8
en post ...
Les points finaux servent à ajouter des variables de requête supplémentaires aux routes existantes, je pense que vous voulez simplement une règle de réécriture Vanilla ici:
function wpd_media_image_rewrite_rule() {
add_rewrite_rule(
'^image/([^/]*)/?',
'index.php?post_type=attachment&name=$matches[1]',
'top'
);
}
add_action( 'init', 'wpd_media_image_rewrite_rule' );
Vous voudrez peut-être y insérer des types MIME valides et ajouter une règle pour chacun. Vous devez également vider les réécritures pour que cela commence à fonctionner, mais n'utilisez pas flush_rewrite_rules
sur init comme dans l'exemple ci-dessus. Les règles ne doivent être effacées que lorsqu'elles changent. Un moyen rapide de les vider consiste simplement à visiter la page des paramètres de permaliens.
Vous aurez également besoin de filtrer au moins attachment_link
pour générer l'URL correcte des médias non attachés, tels que:
function wpd_media_image_att_link( $link, $post_id ){
$post = get_post( $post_id );
if( 0 == $post->post_parent ){
$link = home_url( user_trailingslashit( 'image/' . $post->post_name ) );
}
return $link;
}
add_filter( 'attachment_link', 'wpd_media_image_att_link', 10, 2 );
Ici, nous vérifions si la pièce jointe n'a pas de parent, car si elle est attachée à un article, ce serait un enfant de l'article parent. Vous pouvez également vérifier le type mime ici et rendre la partie image/
dynamique en fonction du type.
Il existe également la fonction wp_get_attachment_link
qui peut nécessiter un filtre, si celui-ci est utilisé quelque part dans le modèle. Je ne pense pas que l’administrateur principal utilise cette fonction n’importe où, mais j’ai peut-être tort.