web-dev-qa-db-fra.com

Changer le slug du type de message personnalisé enregistré dans le thème enfant

J'ai renommé avec succès un type d'article personnalisé enregistré par mon thème parent dans mon thème enfant à l'aide de this method . Le problème est que mes permaliens n'ont pas changé. Ainsi, lorsque je change de portfolio en homepage et que j'utilise la structure permalien /%category%/%postname%/, mes URL ressemblent toujours à mysite.com/ portfolio / page/au lieu de mysite.com/ homepage / page /.

c'est le code que j'utilise pour changer mon CPT:

add_action( 'wp_loaded', 'wpse_19240_change_home_labels', 20 );

function wpse_19240_change_home_labels()
{
global $wp_post_types;
$b = 'portfolio';

if ( empty ( $wp_post_types[ $b ] )
    or ! is_object( $wp_post_types[ $b ] )
    or empty ( $wp_post_types[ $b ]->labels )
    )
    return;

$wp_post_types[ $b ]->labels->name               = 'Sliders';
$wp_post_types[ $b ]->labels->singular_name      = 'Slider';
$wp_post_types[ $b ]->labels->add_new_item       = 'Add New Slider';
$wp_post_types[ $b ]->labels->edit_item          = 'Edit Slider';
$wp_post_types[ $b ]->labels->new_item           = 'New Slider';
$wp_post_types[ $b ]->labels->view_item          = 'View Slider';
$wp_post_types[ $b ]->labels->search_items       = 'Search Sliders';
$wp_post_types[ $b ]->labels->not_found          = 'No sliders found.';
$wp_post_types[ $b ]->labels->not_found_in_trash = 'No sliders found in Trash.';
$wp_post_types[ $b ]->labels->menu_name          = 'Homepage Sliders';
$wp_post_types[ $b ]->labels->all_items          = 'All Sliders';
$wp_post_types[ $b ]->labels->add_new            = 'Add New Slider';
$wp_post_types[ $b ]->labels->name_admin_bar     = 'Slider';
}

J'ai réussi à changer la limace en utilisant:

function change_slug_of_post_type_portfolio() {
    register_post_type('portfolio', array('rewrite' => array ('slug' => 'homepage',)));
}
add_action('init', 'change_slug_of_post_type_portfolio', 20);

Mais maintenant, je reçois une erreur 404 lorsque je navigue sur la page générée par le système: mysite.com/homepage/page/

Je me suis assuré de faire un single-homepage.php et j'ai essayé d'ajouter flush_rewrite_rules(); comme recommandé dans ce post mais en vain.

4
Heather

avec votre code, vous redéfinissez complètement votre CPT au lieu de modifier simplement le slug, peut-être que cela change l'accès public

essaye ça :

$args = get_post_type_object("portfolio");
$args->rewrite["slug"] = "homepage";
register_post_type($args->name, $args);
6
mmm