wp insert post not working

时间:2020-08-04 作者:Zed93

我的wp插入帖子不工作。在post\\u title和post\\u name中,他没有保存变量。因此,在服务地点+变量中,我只得到;“服务”;,为什么?

function mic_create_new_page() {
    global $user_ID;
        $new_post = array(
            \'post_title\' => \'Service \' . $secteur,
            \'post_content\' => \'[makeitseo-keyword]\',
            \'post_status\' => \'publish\',
            \'post_date\' => date(\'Y-m-d H:i:s\'),
            \'post_author\' => $user_ID,
            \'post_type\' => \'page\',
            \'post_name\' => $slugmic
        );
    global $wpdb;
    $tableau_post = array ();
    $tableau_post = mic_stock_in_array($tableau_post);
$res = $wpdb->get_results(\'select * from wp_secteurs\');  
foreach ( $res as $ville ) {
    $id = $ville->id_secteurs;
    $secteur = $ville->libelle;
    $slugmic = strtolower(str_replace(" ","-",$secteur))."-s". $id ; 
    if(!in_array(normalize($slugmic), $tableau_post))
        $post_id = wp_insert_post($new_post);
 }
}

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

这不是PHP中变量的工作方式。你在定义它们之前就已经在使用它们了。它们不是稍后将被替换的模板。如果要在中使用这些变量$new_post 然后你需要定义$new_post 在定义这些变量之后,在循环内部。

function mic_create_new_page() {
    global $user_ID, $wpdb;

    $tableau_post = array ();
    $tableau_post = mic_stock_in_array($tableau_post);
    
    $res = $wpdb->get_results(\'select * from wp_secteurs\');  

    foreach ( $res as $ville ) {
        $id       = $ville->id_secteurs;
        $secteur  = $ville->libelle;
        $slugmic  = strtolower( str_replace( " ", "-", $secteur ) ) . "-s" . $id;
        $new_post = array(
            \'post_title\'   => \'Service \' . $secteur,
            \'post_content\' => \'[makeitseo-keyword]\',
            \'post_status\'  => \'publish\',
            \'post_date\'    => date(\'Y-m-d H:i:s\'),
            \'post_author \' => $user_ID,
            \'post_type\'    => \'page\',
            \'post_name\'    => $slugmic
        );
        
        if ( ! in_array( normalize( $slugmic ), $tableau_post ) ) {
            $post_id = wp_insert_post( $new_post );
        }
    }
}
有几个code smells 在你的代码中,我还想指出:

首先,你依赖于一个全局变量,$user_ID. 这是一个坏主意,因为现在您的函数过于依赖全局状态,这使得其结果不可预测且难以测试。您应该将用户ID作为参数从可靠定义为要使用的用户的位置传递给函数。例如,如果要在用户注册时使用user_register 钩子,则应使用传递到其回调中的用户ID:

function mic_create_new_page( $user_id ) {
    // Now $user_id is guaranteed to be the ID of the user being registered.
}
add_action( \'user_register\', \'mic_create_new_page\' );
其次,我不知道这应该做什么:

 $tableau_post = array ();
 $tableau_post = mic_stock_in_array($tableau_post);
我想不出为什么要这样初始化一个变量,然后将其传递到一个函数中,只替换变量。虽然我对代码了解不多,无法提供任何建议,但我看不出为什么这样做行不通:

 $tableau_post = mic_stock_in_array( array() );
但我怀疑你甚至不需要所有这些。