WP_INSERT_POST创建多个页面

时间:2015-12-23 作者:Galivan

我在函数中有一个函数。自动生成页面的php。它不会检查当前是否已经有一个标题相同的页面。

该功能从以下内容开始:

add_action( \'after_setup_theme\', \'add_pages\' );
edit: 我只想让它运行once 每页加载。我想如果我使用

add_action( \'init\', \'add_pages\' );

以下是添加页面功能中的代码:

function add_pages() {

    $content = "text content";

    $page = array(
        \'post_title\' => \'A unique title?\',
        \'post_content\' => $content,
        \'post_status\' => \'publish\',
        \'post_author\' => 1,
        \'post_type\' => \'page\',
        \'post_parent\' => 0 
    );


    // Add page
    $insert_id = wp_insert_post( $page );
}
当我在wordpress admin中重新加载“posts”页面时,会创建两个新页面。再次重新加载时,将创建四个新页面。当我再次重新加载时,会创建一大堆页面。我想知道这有什么解释吗?

edit: 如果我更改post_title 然后重新加载,只创建一个页面。但如果我再次重新加载,将创建两个页面。但在那之后,它的行为是不合理的,有时每次加载页面时都会创建两个页面,但有时会创建大量页面。

我打算检查页面标题是否已经存在,但我还是想了解这种行为。

2 个回复
SO网友:TheDeadMedic

after_setup_theme 不是你要找的钩子-你想要的after_switch_theme - 当你的主题被初始激活时,这个钩子只会运行一次。

SO网友:Pardeep Nadha

以下是代码,如果标题已存在,则不会创建页面:

function add_pages() {
    $content = "text content";
    $postTitle = \'A unique title?\';
    global $wpdb;

    $query = $wpdb->prepare(
        \'SELECT ID FROM \' . $wpdb->posts . \'
            WHERE post_title = %s
            AND post_type = \\\'page\\\'\',
        $postTitle
    );
    $wpdb->query( $query );

    if ( $wpdb->num_rows ) {
        // Title already exists
    } else {
        $page = array(
            \'post_title\'   => \'A unique title?\',
            \'post_content\' => $content,
            \'post_status\'  => \'publish\',
            \'post_author\'  => 1,
            \'post_type\'    => \'page\',
            \'post_parent\'  => 0 
        );

        // Add page
        $insert_id = wp_insert_post( $page );
    }
}

相关推荐