Buenas Javier,
En este caso se hace con un código regex en el htaccess, para que cualquier url que acabe en .php, redirija a la versión correcta:
<IfModule mod_rewrite.c>
RewriteEngine On
# No redirigir archivos PHP propios de WordPress o carpetas del sistema
RewriteCond %{REQUEST_URI} !^/wp-admin/ [NC]
RewriteCond %{REQUEST_URI} !^/wp-content/ [NC]
RewriteCond %{REQUEST_URI} !^/wp-includes/ [NC]
RewriteCond %{REQUEST_URI} !^/wp-login\.php$ [NC]
RewriteCond %{REQUEST_URI} !^/index\.php$ [NC]
# Redirigir /algo.php a /algo
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ %1 [R=301,L]
</IfModule>
Esto hace:
/bicicletas.php → /bicicletas
/contacto.php → /contacto
Si quieres con la barra final:
<IfModule mod_rewrite.c>
RewriteEngine On
# No redirigir archivos PHP propios de WordPress o carpetas del sistema
RewriteCond %{REQUEST_URI} !^/wp-admin/ [NC]
RewriteCond %{REQUEST_URI} !^/wp-content/ [NC]
RewriteCond %{REQUEST_URI} !^/wp-includes/ [NC]
RewriteCond %{REQUEST_URI} !^/wp-login\.php$ [NC]
RewriteCond %{REQUEST_URI} !^/index\.php$ [NC]
# Redirigir cualquier URL terminada en .php a su versión sin extensión y con barra final
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ %1/ [R=301,L]
</IfModule>
Esto haría:
/bicicletas.php → /bicicletas/
/tienda/cascos.php → /tienda/cascos/
Usa según cómo hayas configurado los enlaces permanentes de wordpress. Y ponlo al principio del todo del htaccess sin borrar nada existente
Un saludo!