o hook de ação publish_post não dá post_meta_data

4

Eu escrevo a seguinte função para obter os dados do post no post de publicação, mas vejo que o post_meta não está disponível, está sempre vazio. Como recupero os meta dados de um post no hook publish_post?

A conclusão é que eu quero coletar os dados $ article convertidos em json e postá-los usando curl. Quando eu convertê-lo usando print_r(json_encode($article)) ele realmente executa as tags html no conteúdo e na saída. Existe alguma maneira legal de fazer como o wp_send_json está fazendo?

add_action( 'publish_post', 'newdb',10,2);

function newdb($post_id, $post){

            if($post_id !=null){
            $article['postID'] = $post->ID;
            $article['seo_url'] = get_permalink($post->ID);
            $article['title'] = $post->post_title;
            $article['status'] = $post->post_status;
            $article['body'] = html_entity_decode(htmlentities(addslashes($post->post_content)));
            $article['related'] = array();
            $relatedStories = get_post_meta($post->ID, 'realtor_related_stories', true);
            if ($relatedStories != null) {
                $rsCount = count($relatedStories) - 1;
                while ($rsCount > 0) {
                    $rStories['title'] = $relatedStories['related_stories_attribution_' . $rsCount]['headline'];
                    $rStories['seo_url'] = $relatedStories['related_stories_attribution_' . $rsCount]['url'];
                    $rStories['img_src'] = wp_get_attachment_url(get_post_thumbnail_id(url_to_postid($rStories['seo_url'])));
                    array_push($article['related'], $rStories);
                    $rsCount--;
                }
            }
 $article['seo_focus_keyword'] = get_post_meta($post->ID, '_yoast_wpseo_focuskw', true);
            $article['seo_title'] = get_post_meta($post->ID, '_yoast_wpseo_title', true);
            $article['seo_metadesc'] = get_post_meta($post->ID, '_yoast_wpseo_metadesc', true);
  wp_send_json($article);
//print_r($article) => gives wierd output because of embed tags in post body

        }
}
    
por deepthi shv 02.06.2016 / 21:19

1 resposta

0

Se a função wp_send_json() estiver enviando os dados corretos, mas, por algum motivo, você quiser usar outra função para enviar os dados JSON, então você pode usar wp_json_encode() . Essa é basicamente a única coisa que wp_send_json() faz antes de enviar os dados.

add_action( 'publish_post', 'wpse_228607_publish_post', 10, 2 );
function wpse_228607_publish_post( $post_id, $post ){
  //* Do some stuff to get your $article variable

  $encode = wp_json_encode( $article );

  //* Do some stuff with the json encoded article
}

Verifique se você está enviando o tipo de conteúdo e o conjunto de caracteres corretos. wp_send_json() cuida disso para você.

    
por Nathan Johnson 13.02.2018 / 23:00

Tags