Zasadniczo mam niestandardową konfigurację typu postu o nazwie "Części" z ponad 5000 wpisów w niej obecnie. Z każdą częścią jest przypisanych kilka niestandardowych pól, w tym "numer części". Obecnie URL dla poszczególnych części wynosi:Napisy masowe po przerobie na podstawie wartości pola niestandardowego w Wordpress
http://site.com/parts/name-of-part/
Co wolałbym mieć to:
http://site.com/parts/XXXX-608-AB/ (to numer części, przechowywane jako pole niestandardowe "Nr kat.")
Uważam, że muszę zrobić dwie rzeczy:
1) Utwórz skrypt do zbiorczej edycji wszystkich wtyczek dla każdej istniejącej części, w oparciu o niestandardowe pole "partno".
2) Podłącz się do funkcji Wordpress, aby wywołać tę funkcję, aby zawsze tworzyć korek dla nowych części w oparciu o niestandardowe pole "partno".
Czy ktoś ma wiedzę na temat sposobu osiągnięcia jednego lub obu tych aspektów?
UPDATE: Poniżej znajduje się kod skończyło się stosując na zmianę istniejących stanowisk
// Set max posts per query
$max = 500;
$total = 5000;
for($i=0;$i<=$total;$i+=$max) {
$parts = get_posts(array('post_type' => 'parts', 'numberposts' => $max, 'offset' => $i));
// loop through every part
foreach ($parts as $part) {
// get part number
$partno = get_post_meta($part->ID, 'partno', true);
$updated_post = array();
$updated_post['ID'] = $part->ID;
$updated_post['post_name'] = $partno;
wp_update_post($updated_post); // update existing posts
echo $part->ID;
}
}
UPDATE: Poniżej znajduje się kod użyłem w functions.php zmienić trwającego posty (po części dzięki do https://wordpress.stackexchange.com/questions/51363/how-to-avoid-infinite-loop-in-save-post-callback)
add_action('save_post', 'my_custom_slug');
function my_custom_slug($post_id) {
//Check it's not an auto save routine
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
return;
//Perform permission checks! For example:
if (!current_user_can('edit_post', $post_id))
return;
//If calling wp_update_post, unhook this function so it doesn't loop infinitely
remove_action('save_post', 'my_custom_slug');
//call wp_update_post update, which calls save_post again. E.g:
if($partno != '')
wp_update_post(array('ID' => $post_id, 'post_name' =>get_post_meta($post_id,'partno',true)));
// re-hook this function
add_action('save_post', 'my_custom_slug');
}
To wygląda świetnie! Postaram się teraz wdrożyć. Jeszcze jedno pytanie: czy istnieje sposób zapobiegania przypadkowemu powielaniu? Na przykład, co się dzieje, gdy numer części jest taki sam dla dwóch części? Zakładam, że wp_update_post nie bierze tego pod uwagę. –
Okay, dowiedziałem się, że wp_update_post rzeczywiście to uwzględnia. Sprawdza nazwę post_name dla duplikatów. –