Замена заголовка поста пользовательской таксономией в wordpress

Используя фильтры/крючки, как бы я заменил заголовок сообщения WordPress любым термином, выбранным из пользовательской таксономии.

Надеюсь, прикрепленное изображение объяснит, что я пытаюсь сделать.

введите здесь описание изображения

Допустим, я выбрал «Powerchrono» — я хочу, чтобы название сообщения было заменено выбранным термином и его родителем.

Любая помощь приветствуется.

Я, очевидно, хотел бы, чтобы URL-адрес сообщения также обновлялся.


person Nick    schedule 22.10.2012    source источник


Ответы (1)


Я не могу гарантировать, что это будет работать прямо из ворот, так как это не проверено. Но это должно помочь вам начать:

functions.php

<?php
add_action('save_post', 'update_term_title');
function update_term_title($post_id)
{
    if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) 
        return;
    if(!current_user_can('edit_post', $post_id))
        return;

    //Replace 'manufacturer' with whatever your custom taxonomy slug is
    $terms = wp_get_post_terms($post_id, 'manufacturer');

    if(empty($terms))
        return;

    $title = false;
    foreach($terms as $term)
    {
        if($term->parent)
        {
            $parent = get_term($term->parent, 'manufacturer');
            $title = $term->name.' '.$parent->name;
            break;
        }
    }
    /*Default to first selected term name if no children were found*/
    $title = $title ? $title : $terms[0]->name;

    /*We must disable this hook and reenable from within
    if we don't want to get caught in a loop*/
    remove_action('save_post', 'update_term_title');
    $update = array(
        'ID'=>$post_id,
        'post_name'=>sanitize_title_with_dashes($title),
        'post_title'=>$title
    );
    wp_update_post($update);
    add_action('save_post', 'update_term_title');
}
?>
person maiorano84    schedule 22.10.2012
comment
Ух ты! Ну, из коробки он работает почти на 100% - единственная проблема, которая у меня есть, заключается в том, что по какой-то причине он не использует родительский термин в заголовке. Я нажал на PowerChrono, и заголовок поста был «PowerChrono», а не «Accurist PowerChrono». - person Nick; 22.10.2012
comment
Вам пришлось изменить ярлык таксономии, где я отметил его в своих комментариях? Если да, вы также изменили его, где был установлен $parent? - person maiorano84; 22.10.2012
comment
Я исправил это, я просто изменил «производитель» на «производители». Это работает как удовольствие, спасибо за помощь. - person Nick; 22.10.2012
comment
Именно то, что я искал в течение нескольких часов, спасибо - person bilcker; 03.09.2014