Как я могу получить некоторые метаданные сообщений, пока они все еще вставляются?

Я пытаюсь создать функцию, в которой дочерний пост определенного типа наследует тот же заголовок и ярлык, что и его родитель. Я использую WP Types для определения своих типов сообщений и их взаимосвязей. Но у меня проблемы с кодом ниже:

function copy_parent_post_title( $post_id ) {

    $new_post = get_post($post_id);

    if($new_post->post_type == 'carnews-adverts') {

        $parent_id = get_post_meta( $post_id, '_wpcf_belongs_carnews_id', true );
        $parent_title = get_the_title($parent_id);
        $post_slug = sanitize_title_with_dashes($parent_title);

        $post_update = array(
            'ID'           => $post_id,
            'post_title' => $parent_title,
            'post_name' => $post_slug
        );

        remove_action( 'wp_insert_post', 'copy_parent_post_title' );
        wp_update_post( $post_update );
        add_action( 'wp_insert_post', 'copy_parent_post_title' );

    }

}
add_action( 'wp_insert_post', 'copy_parent_post_title' );

Проблема в этой строке:

$parent_id = get_post_meta( $post_id, '_wpcf_belongs_carnews_id', true );

Я полагаю, это потому, что на данный момент метаданные сообщения еще не были вставлены в базу данных? Если да, то как я могу добиться того, чего хочу, обратившись к get_post_meta при вставке сообщения?

Спасибо


person user1280853    schedule 24.01.2014    source источник
comment
Почему не $parent_title = get_the_title($post_id); или $parent_title = $new_post->post_title;? Разве $post_id не является идентификатором родительского сообщения?   -  person Hamish    schedule 24.01.2014
comment
Нет, $post_id — это текущая вставляемая запись, а не родительская запись.   -  person user1280853    schedule 24.01.2014
comment
Я думаю, чтобы получить доступ к '_wpcf_belongs_carnews_id', который начал добавляться WP Types, вам нужно посмотреть в массиве $_POST.   -  person Hamish    schedule 24.01.2014


Ответы (1)


Я думаю, чтобы получить доступ к '_wpcf_belongs_carnews_id', который добавляется WP Types, вам нужно посмотреть в массиве $_POST. Однако WP Types может вызывать add_post_meta() после вызова wp_insert_post(). В этом случае метаданные не будут присутствовать, если вы подключитесь к wp_insert_post.

Вместо этого подключите свою функцию к add_post_meta:

function copy_parent_post_title( $post_id, $meta_key, $meta_value ) {

    $new_post = get_post($post_id);

    if (($new_post->post_type == 'carnews-adverts') &&
        ($meta_key == '_wpcf_belongs_carnews_id')) {

        $parent_id = $meta_value;

        $parent_title = get_the_title($parent_id);

        // ... Rest of your function
    }
}
add_action( 'add_post_meta', 'copy_parent_post_title', 10, 3 );

Это может быть совершенно неправильно, поскольку я почти никогда не использую Wordpress.

person Hamish    schedule 24.01.2014