首页 > 解决方案 > wp_update_post () 在未登录或从命令行时不接受 tax_input

问题描述

为 WordPress 编写一个导入脚本,当登录到同一个 WordPress 站点时,导入从浏览器窗口正常工作。但是,从命令行(或从 icognito 窗口)执行脚本只能部分工作。除了更新“cheatsheetcat”分类法之外,它什么都做。

我怀疑这与“公共”标志有关,但我并不完全理解。

分类设置如下:

function pios_add_cheatsheet_taxonomy()
{
    $labels = array(
        'name'              => 'Cheat Sheet Categories',
        'singular_name'     => 'Cheat Sheet Category',
        'search_items'      => 'Search Cheat Sheet Category',
        'all_items'         => 'All Cheat Sheet Categories',
        'parent_item'       => 'Parent Cheat Sheet Category',
        'parent_item_colon' => 'Parent Cheat Sheet Category:',
        'edit_item'         => 'Edit Cheat Sheet Category',
        'update_item'       => 'Update Cheat Sheet Category',
        'add_new_item'      => 'Add New Cheat Sheet Category',
        'new_item_name'     => 'New Cheat Sheet Category',
        'menu_name'         => 'Cheat Sheet Category',
    );

    $args = array(
        'labels'            => $labels,
        'hierarchical'      => true,
        'query_var'         => true,
        'rewrite'           => true,
        'public'            => true,
        'show_admin_column' => true,
    );
    register_taxonomy('cheatsheetcat', 'attachment', $args);


    //Add the parent categories
    $ar_parent_categories = array("Item category", "Industry", "Family", "BeerWine");

    foreach ($ar_parent_categories as $category) {
        $item_term = term_exists($category, 'cheatsheetcat', 0);

        // Create state if it doesn't exist
        if (!$item_term) {
            $item_term = wp_insert_term($category, 'cheatsheetcat', array('parent' => 0));
        }
    }
}
add_action('init', 'pios_add_cheatsheet_taxonomy');

我认为失败的导入脚本部分是:

$custom_tax = array(
    'cheatsheetcat' => $arTaxCheetSheet
);

//Update the attachment / post
$attachment = [
    'ID'           => $id,
    'post_title'   => $filename,
    'post_content' => $content,
    'post_excerpt' => $excerpt,
    'tax_input'    => $custom_tax,
];

$post_id = wp_update_post ($attachment, true);

if (is_wp_error($post_id)) {
    $errors = $post_id->get_error_messages();
    foreach ($errors as $error) {
        echo $error;
    }
}

此时的 $arTaxCheetSheet 是正确的,已将其打印到屏幕上。但是我缺少 WordPress 更深层次的东西。

任何洞察力都会令人惊叹。

标签: phpwordpress

解决方案


在脚本开头使用wp_set_current_user设置用户为我解决了这个问题。


推荐阅读