Проверка пользовательских сообщений, а затем публикация после проверки на сервере - WordPress - PullRequest
1 голос
/ 28 июля 2011

В основном я сохраняю пользовательский пост на WordPress. Я решил провести пользовательскую проверку на стороне сервера. Ниже приведена упрощенная версия моего кода. Проблема, с которой я здесь сталкиваюсь, заключается в том, что, несмотря на проверку, она переводит себя в режим ожидания, несмотря на заполнение поля. Есть идеи, где я ошибаюсь?

add_action ('save_post', 'save_campaigns', 10, 2);

add_action ('save_post', 'completion_validator', 20, 2);

function save_campaigns($pid, $post)
{
    if ( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) || $post->post_tatus == 'auto-draft' ) return $pid;
    if ( $post->post_type != 'work' ) return $pid;

    update_post_meta($pid, 'campaign_client', $_POST['campaign_client']);

}

function completion_validator($pid, $post) 
{
    // don't do on autosave or when new posts are first created
    if ( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) || $post->post_status == 'auto-draft' ) return $pid;
    if ( $post->post_type != 'work' ) return $pid;

    // init completion marker (add more as needed)
    $meta_missing = false;

    // retrieve meta to be validated
    $clientmeta = get_post_meta( $pid, 'campaign_client', true );

    // just checking it's not empty - you could do other tests...
    if ( empty( $clientmeta) or empty( $shortcopymeta) or empty( $longcopymeta) or empty( $gallerymeta) or empty( $thumbnailmeta)) 
    {
        $meta_missing = true;
    }

    // on attempting to publish - check for completion and intervene if necessary
    if ( ( isset( $_POST['publish'] ) || isset( $_POST['save'] ) ) && $_POST['post_status'] == 'publish' ) 
    {
        //  don't allow publishing while any of these are incomplete
        if ($meta_missing == true) 
        {
            global $wpdb;
            $wpdb->update( $wpdb->posts, array( 'post_status' => 'pending' ), array( 'ID' =>$pid ) );
            // filter the query URL to change the published message
            add_filter( 'redirect_post_location', create_function( '$location','return add_query_arg("message", "4", $location);' ) );

        }
    }
}

1 Ответ

0 голосов
/ 18 февраля 2012

Когда сообщение опубликовано, оно, по моим сведениям, вызывает publish_post.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...