WordPress не записывает значения таксономий при запуске скрипта через cron
Если нужно из стороннего источника формировать посты в базе WordPress, чаще всего это делается с помощью функции wp_insert_post. Отладив программу, запуская ее через web-интерфейс админки, я столкнулся с проблемой, что посты записываются не верно, используя запуск через cron. А именно: не записываются таксономии. Т.е., например, нет возможности задать категорию поста. В этом посте о простом способе решении этой проблемы.
Для записи поста я использовал похожий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$args = array( 'comment_status' => 'closed', 'ping_status' => 'closed', 'post_author' => 1, 'post_content' => $content, 'post_status' => 'publish', 'post_title' => $title, 'post_type' => 'movie', 'tax_input' => array( 'genre' => array('term1', 'term2', 'term3') ) ); $wp_movie_id = wp_insert_post($args); |
Который отлично работал в web-интерфейсе, но не работал при запуске, через cron. Долго искал решение проблемы и наткнулся на приведенную ниже статью. Там говорится, что для записи таксономий, через функцию wp_insert_post у cron не хватает прав. Странно, я пробовал запуск скрипта и под root — ситуация та же. Но решение проблемы есть, и оно довольно простое.
Решение проблемы заключается в использовании функции
1 |
wp_set_object_terms( $wp_movie_id, $terms, $taxonomy); |
где:
$wp_movie_id — ID записи, которой нужно присвоить элемент таксономии;
$terms — Названия элеменов таксономии, для присвоения;
$taxonomy — таксономия (например, ‘category’ ).
После таких изменений в коде, скрипт прекрасно работает при запуске из командной строки и при вызове из cron.
Дополнительная информация:
Поделиться "WordPress не записывает значения таксономий при запуске скрипта через cron"