Quando e onde usar wp_insert_post ()

4

Estou criando uma função que cria um grupo de páginas com um ID pai comum.

Se eu rodar wp_insert_post () em um ID pai duas vezes, a função cria as páginas duas vezes enquanto altera as slugs? Ou estou seguro para colocar isso em minhas funções.php assim:

add_action('init', 'AddMyPages');
    
por AlxVallejo 24.01.2012 / 21:46

1 resposta

7

Use algum tipo de tag condicional para verificar se essas postagens existem ou não. Se eles não existirem, crie-os com wp_insert_post . Faça esta lógica dentro da função AddMyPages e não em torno da função add_action .

Exemplo

Você deseja adicionar uma página com um ID pai somente se ele não existir e desejar que essa página sempre exista. Como está no init hook, sempre verificará se essa página existe, portanto, não é realmente recomendado fazer isso dessa maneira. Você deve realmente fazer isso na ativação de um plugin (então eu editei minha resposta para esse método).

register_activation_hook( __FILE__, 'AddThisPage' );

function AddThisPage() {
    global $wpdb; // Not sure if you need this, maybe

    $page = array(
        'post_title' => 'My post',
        'post_content' => 'This is my post.',
        'post_status' => 'publish',
        'post_author' => 1,
        'post_type' => 'page',
        'post_parent' => 3 // ID of the parent page
    );

    $page_exists = get_page_by_title( $page['post_title'] );

    if( $page_exists == null ) {
        // Page doesn't exist, so lets add it
        $insert = wp_insert_post( $page );
        if( $insert ) {
            // Page was inserted ($insert = new page's ID)
        }
    } else {
        // Page already exists
    }

}

Obrigado ao @kaiser por me lembrar, register_activation_hook é executado apenas em plugins , não em temas.

Quanto a um tema, bem, eu não sei de um gancho de ativação oficial, apenas switch_theme , mas que é executado antes de o tema estar ativo. Eu encontrei uma solução aqui , mas pode estar fora de data, poderia ser algo útil para investigar.

Recursos usados

wp_insert_post , get_page_by_title , register_activation_hook

    
por Jared 24.01.2012 / 21:54