Come rinominare Post di tipo post predefiniti


Risposte:


9

Se vuoi semplicemente rinominare l'aspetto dei post, piuttosto che creare un tipo di post personalizzato, aggiungi questo codice al tuo file Functions.php di temi.

// hook the translation filters
add_filter(  'gettext',  'change_post_to_portfolio'  );
add_filter(  'ngettext',  'change_post_to_portfolio'  );

function change_post_to_portfolio( $translated ) {
  $translated = str_ireplace(  'Post',  'Portfolio',  $translated );  // ireplace is PHP5 only
  return $translated;
}

Nell'interesse della trasparenza ho ricevuto questo codice da questo articolo , anche se in passato ho usato trucchi simili.


2
Mentre questo va bene come visualizzazione del concetto tecnico, la sostituzione di alcune parole in tutto il testo localizzato è eccessivamente ampia.
Rarst

In che modo ciò influirà sulle prestazioni? I filtri sopra sono usati solo nel backend?
mikkelbreum,

Penso che questa non sia una buona soluzione a questo caso particolare. $ translate potrebbe contenere una stringa come "fai clic sul post man" o "se om du har fået post" (danese), nel qual caso NON vorresti sostituire "post" con "news"
mikkelbreum,

9

Ho usato il seguente script per rinominare il tipo di post predefinito:

function change_post_menu_label() {
    global $menu, $submenu;

    $menu[5][0] = 'Portfolio';
    $submenu['edit.php'][5][0] = 'Portfolio';
    $submenu['edit.php'][10][0] = 'New Portfolio';
    $submenu['edit.php'][16][0] = 'Portfolio Tags';
    echo '';
}
add_action( 'admin_menu', 'change_post_menu_label' );

function change_post_object_label() {
    global $wp_post_types;

    $labels = &$wp_post_types['post']->labels;
    $labels->name = 'Portfolio';
    $labels->singular_name = 'Portfolio';
    $labels->add_new = 'New Portfolio';
    $labels->add_new_item = 'New Portfolio';
    $labels->edit_item = 'Edit Portfolio';
    $labels->new_item = 'New Portfolio';
    $labels->view_item = 'View Portfolio';
    $labels->search_items = 'Search Portfolio';
    $labels->not_found = 'Not found';
    $labels->not_found_in_trash = 'Not found in trash';
}
add_action( 'init', 'change_post_object_label' );

7

Devi creare un tipo di post personalizzato, "Portfolio".

I post sono post. Perché provare a usarli come qualcosa che non sono, e quindi provare a cambiare la loro nomenclatura, invece di scrivere una o due semplici funzioni functions.php, che si tradurrà in avere sia la funzionalità esatta che la nomenclatura esatta che desideri?


Poiché non ho usato tipi di post personalizzati fino ad oggi e il sito Web che ho creato utilizza la funzionalità blog per gestire un portfolio poiché il cliente non desidera un blog, quindi ho pensato perché non utilizzare il blog impostato per eseguire un portfolio - salva reinventare la ruota per così dire. Sembra molto più facile cambiare i nomi dei manu che rifare l'intero sito poiché tutto il contenuto è stato aggiunto.
Evie Milo,

Basterebbe una query SQL per modificare il tipo di post per tutti i post interessati, una volta creato il tipo di post personalizzato ...
Chip Bennett,

1
Chip è decisamente corretto qui. Questo è quello che farei e cosa dovrei fare in un caso come questo IMHO.
mfields,

2
Il sql di cui hai bisogno è un po 'così UPDATE wp_posts SET post_type = 'funny-bunny' WHERE post_type = 'post';: molto probabilmente dovrai cambiare il prefisso della tabella (wp_) per riflettere quell'impostazione nella tua attuale installazione.
mfields,

2
Mi permetto di differire dall'onorevole Chip Bennett ... I post sono lì per organizzare elementi in modo cronologico. Perché registrare un altro post_type, cambiare le query, se tutto ciò di cui hai bisogno è già lì? Nei miei siti Web non inglesi, cambio regolarmente i file della lingua di WordPress in modo che corrispondano alla funzionalità Post e li rinomino in Notizie, Articoli o Portfolio.
brasofilo,

2
// hook the translation filters
add_filter(  'gettext',  'change_post_to_article'  );
add_filter(  'ngettext',  'change_post_to_article'  );

function change_post_to_article( $translated ) {
     $translated = str_ireplace(  'Post',  'Article',  $translated );  // ireplace is PHP5 only
     return $translated;
}

Ho preso questo consiglio da smashing magazine e l'ho testato e funziona benissimo

http://www.smashingmagazine.com/2011/05/10/new-wordpress-power-tips-for-template-developers-and-consultants/

1

Ho trovato questa discussione quando stavo cercando una soluzione per cambiare il tipo di post da un nome all'altro.

Invece di fare una query personalizzata come suggerito da qualcuno qui ho semplicemente fatto questo:

$post = get_post( $id );      // The current post id
$post->post_type = 'receipt'; // The new post type name
wp_update_post( $post );      // Updating the new information

I cpt devono essere già stati creati e formati ..


1

Rinomina i post nel portfolio

function litho_posts_portfolio() {
    global $menu;
    global $submenu;
    $menu[5][0] = __("Portfolio", 'litho');
    $submenu['edit.php'][5][0] = __("Portfolio", 'litho');
    $submenu['edit.php'][10][0] = __("New Item", 'litho');
    echo '';
}
function litho_posts_portfolio_label() {
    global $wp_post_types;
    $labels = &$wp_post_types['post']->labels;
    $labels->name = __("Portfolio", 'litho');
    $labels->singular_name = __("Item", 'litho');
    $labels->add_new = __("New Item", 'litho');
    $labels->add_new_item = __("New Item", 'litho');
    $labels->edit_item = __("Edit Item", 'litho');
    $labels->new_item = __("Item", 'litho');
    $labels->view_item = __("View Item", 'litho');
    $labels->search_items = __("Search Portfolio", 'litho');
    $labels->not_found = __("No Item Found", 'litho');
    $labels->not_found_in_trash = __("No Item found in Trash", 'litho');
}
add_action( 'init', 'litho_posts_portfolio_label' );
add_action( 'admin_menu', 'litho_posts_portfolio' );

In che modo differisce dall'altra risposta di @elbatron?
Kaiser

@kaiser - Questa risposta è corretta, quella contrassegnata come la risposta dall'OP non è corretta (guarda le azioni - 'admin_menu' e 'init' sono nel senso sbagliato. Anche questa risposta utilizza la __()funzione.
David Gard

Perché il echo '';?
Bill

0

Se vuoi solo cambiare l'etichetta del menu di amministrazione da Posta -> Portfolio, guarda questa domanda:

Modifica delle etichette del menu Admin

[Aggiornare]

Questo plug-in Admin Menu Editor sembra che ti permetterà di cambiare più facilmente le etichette dei menu - non l'ho ancora provato.


grazie vedrò se riesco a capire qualcosa da questo, anche se mi sembra un po 'complicato.
Evie Milo,

1
Ho aggiunto un link ad un plugin che dovrebbe aiutare
anu

grazie per il link, ma voglio ottenere di più nel file Functions.php ed evitare di usare troppi plugin. Ho seguito il tuo primo link e alla fine mi ha portato qui: new2wp.com/snippet/change-wordpress-posts-post-type-news e questo mi ha aiutato a risolverlo molto rapidamente - grazie per il tuo aiuto!
Evie Milo,

@Evie Milo - dovresti contrassegnare la risposta come accettata.
Kaiser

0

Devi solo creare un altro post personalizzato con le stesse funzionalità di un post normale. È quindi possibile disabilitare il menu Messaggi con questo:

function remove_menus()
{
    global $menu;
    $restricted = array( __('Posts'));
    end ($menu);

    while (prev($menu))
    {
        $value = explode(' ',$menu[key($menu)][0]);

        if(in_array($value[0] != NULL?$value[0]:"" , $restricted))
        {
            unset($menu[key($menu)]);
        }
    }
}
add_action('admin_menu', 'remove_menus');

percorrere questa strada creerebbe troppo lavoro aggiuntivo in questa fase avanzata del progetto - non qualcosa che il budget consentirebbe - ora è stato aggiunto tutto il contenuto e volevo solo vedere se c'era un modo per rinominare i post in portfolio, quindi era meno confuso per il cliente.
Evie Milo,

0

Il get_post_type_object farà il lavoro.

add_action( 'init', 'ns_change_post_object' );
// Change dashboard Posts to News
function ns_change_post_object() {
   $get_post_type = get_post_type_object('post');
    $labels = $get_post_type->labels;
    $labels->name = 'News';
    $labels->singular_name = 'News';
    $labels->add_new = 'Add News';
    $labels->add_new_item = 'Add News';
    $labels->edit_item = 'Edit News';
    $labels->new_item = 'News';
    $labels->view_item = 'View News';
    $labels->search_items = 'Search News';
    $labels->not_found = 'No News found';
    $labels->not_found_in_trash = 'No News found in Trash';
    $labels->all_items = 'All News';
    $labels->menu_name = 'News';
    $labels->name_admin_bar = 'News';
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.