激活我的插件时获得重复页面

时间:2015-12-29 作者:Rohit Poonia

我正在创建一个插件,我需要在其中创建一个动态页面并为其分配一个模板。我使用以下代码创建了它:

function gallerypage() {    
    global $wpdb;
    $check_page = $wpdb->get_row( "SELECT * FROM wp_posts WHERE post_name = \'archive-gallery\'" );

    if ( ! $check_page ) {
        $page_time = the_time( \'Y-m-d g:i:s\' );
        $gallery_page = array(
            \'post_title\'    => \'Archive Gallery\',
            \'post_content\'  => \'This page is dedicated to the archive gallery. and it is used to show all the gallerys\',
            \'post_status\'   => \'publish\',
            \'post_type\'     => \'page\',
            \'post_author\'   => 1,
            \'post_slug\'     => \'archive-gallery\',
            \'post_date\'     => $page_time
        );

        //$wpdb->update($wpdb->prefix.\'pn_options\', array(\'option_value\'=>$post_id), array(\'id\'=>\'10\'));
        $p_ID = wp_insert_post( $gallery_page );
        update_post_meta( $p_ID, "_wp_page_template", "archivegallery.php" );
    }
} 
add_action( \'init\', \'gallerypage\' );
问题是,当我激活插件时,页面会一次又一次地创建,就像股市更新一样。我做错了什么?

1 个回复
最合适的回答,由SO网友:shanebp 整理而成

如果没有找到结果,$wpdb->get_row 将返回NULLfalse
https://codex.wordpress.org/Class_Reference/wpdb#SELECT_a_Row

您正在使用add_action(\'init\', \'gallerypage\'); 因此,它每加载一次就运行一次。您应该使用register_activation_hook 因此,它只在插件激活时运行。https://codex.wordpress.org/Function_Reference/register_activation_hook

尝试使用get_page_by_path() 检查页面是否已存在。那么您就不需要使用$wpdb 全局和自定义sql。https://codex.wordpress.org/Function_Reference/get_page_by_path

相关推荐