Vous pouvez réellement convertir les slugs de post-format pour faire votre URL personnalisée pour vos post format. Je ne parle pas de changer le slug dans la base de données, mais bien de l’url (permalink) en front de votre site.

Dans cet article, je couvrirai deux choses:

  • Comment changer la base de réécriture du post-format.
  • Comment changer le slug post-format dans l’ URL .

Tout le code dans ce tutoriel doit être placé dans un plugin. Ne l’ajoutez donc pas à votre thème.

Base de ré-écriture des formats de post

Dans l’administrateur WordPress, vous êtes autorisé à modifier le tag et la base de catégories à partir de la page des paramètres de liens permanents. Il n’y a pas une telle option pour les formats de post dans l’administrateur. Cependant, cela peut être fait.

WordPress enregistre les formats de post comme toute autre taxonomie en utilisant la fonction register_taxonomy(). Heureusement, il offre un filtre appelé post_format_rewrite_base qui vous permet de remplacer la base.

Dans le code principal, ce hook ressemble à ce qui suit.

$post_format_base = apply_filters( 'post_format_rewrite_base', 'type' );

Vous remarquerez que la base par défaut est type, ce qui vous donnera des URL d’archive de post-format comme mon-domaine.com/type/post-format-slug.

Avec le hook du filtre, il est extrêmement facile de changer cela en quelque chose de nouveau. Supposons que vous vouliez que le type soit plutôt types. Votre code de plug-in ressemblerait à ceci:

add_filter( 'post_format_rewrite_base', 'my_post_format_rewrite_base' );

function my_post_format_rewrite_base( $slug ) {
return 'types';
}

Vous pouvez changer à peu près tout ce que vous voulez. Remplacez simplement types par votre base préférée.

Vous devrez vider vos règles de réécriture pour que le changement ait lieu. La manière la plus simple de le faire est de simplement visiter votre écran «Paramètres> Permaliens» dans l’administrateur de WordPress.

Slug de post-format personnalisé dans l’URL

C’est là que les choses deviennent un peu délicates. Il suffit de regarder le code WordPress de base pour trouver une solution. Les post-formats étant non standard comparés aux autres taxonomies par défaut (tous les slugs post-format- étant préfixés par post-format- ), les développeurs principaux devaient implémenter un code personnalisé pour les rendre «beaux» sur le front-end. La bonne nouvelle à ce sujet est que vous pouvez emprunter le code de base pour vos besoins.

La première étape est que vous avez besoin d’une fonction pour tous vos slugs personnalisés. J’ai choisi de faire des versions plurielles des slugs, mais vous pouvez faire n’importe quoi avec cela. Par exemple, vous voudrez peut-être modifier les slugs pour qu’ils correspondent à votre langue.

function my_get_post_format_slugs() {

	$slugs = array(
		'aside'   => 'asides',
		'audio'   => 'audio',
		'chat'    => 'chats',
		'gallery' => 'galleries',
		'image'   => 'images',
		'link'    => 'links',
		'quote'   => 'quotes',
		'status'  => 'status-updates',
		'video'   => 'videos'
	);

	return $slugs;
}

Rappelez-vous, ce sont des slugs, alors ne faites rien de fou. Utilisez simplement des lettres minuscules et une césure au lieu d’utiliser des espaces.

L’étape suivante du processus consiste à filtrer les liens post-format pour utiliser vos slugs personnalisés.

/* Remove core WordPress filter. */
remove_filter( 'term_link', '_post_format_link', 10 );

/* Add custom filter. */
add_filter( 'term_link', 'my_post_format_link', 10, 3 );

/**
 * Filters post format links to use a custom slug.
 *
 * @param string $link The permalink to the post format archive.
 * @param object $term The term object.
 * @param string $taxnomy The taxonomy name.
 * @return string
 */
function my_post_format_link( $link, $term, $taxonomy ) {
	global $wp_rewrite;

	if ( 'post_format' != $taxonomy )
		return $link;

	$slugs = my_get_post_format_slugs();

	$slug = str_replace( 'post-format-', '', $term->slug );
	$slug = isset( $slugs[ $slug ] ) ? $slugs[ $slug ] : $slug;

	if ( $wp_rewrite->get_extra_permastruct( $taxonomy ) )
		$link = str_replace( "/{$term->slug}", '/' . $slug, $link );
	else
		$link = add_query_arg( 'post_format', $slug, remove_query_arg( 'post_format', $link ) );

	return $link;
}

La dernière étape consiste à filtrer le hook de request . La raison en est que WordPress voit le slug personnalisé que vous avez utilisé, qui n’existe pas techniquement. Étant donné que tous les formats de post sont enregistrés en tant que post-format-slug dans la base de données, vous devez indiquer à WordPress le terme slug correct.

/* Remove the core WordPress filter. */
remove_filter( 'request', '_post_format_request' );

/* Add custom filter. */
add_filter( 'request', 'my_post_format_request' );

/**
 * Changes the queried post format slug to the slug saved in the database.
 *
 * @param array $qvs The queried variables.
 * @return array
 */
function my_post_format_request( $qvs ) {

	if ( !isset( $qvs['post_format'] ) )
		return $qvs;

	$slugs = array_flip( my_get_post_format_slugs() );

	if ( isset( $slugs[ $qvs['post_format'] ] ) )
		$qvs['post_format'] = 'post-format-' . $slugs[ $qvs['post_format'] ];

	$tax = get_taxonomy( 'post_format' );

	if ( !is_admin() )
		$qvs['post_type'] = $tax->object_type;

	return $qvs;
}

Vous les avez maintenant : vos URL de format de post personnalisés.

Procéder avec prudence

J’ai seulement exécuté le code à travers quelques tests après l’avoir écrit. J’ai juste pensé que ce serait quelque chose d’amusant à faire si cela était possible.

Amusez-vous avec le code et essayez quelques variantes.

Catégories : Wordpress

siddhy

Développeur web full stack depuis une 15aine d'année dans une agence web du sud de la France et Geek depuis toujours, l'apprentissage et le partage font parti intégrante de ma philosophie au même titre que l'évolution personnelle et la sagesse bouddhiste.

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site est protégé par reCAPTCHA et le GooglePolitique de confidentialité etConditions d'utilisation appliquer.

The reCAPTCHA verification period has expired. Please reload the page.