Как отключить перенаправление после добавления нового продукта в Dokan Vendor Plugin
Недавно я создал собственный шорткод, который отображает форму Dokan "Добавить продукт", но теперь каждый раз, когда я добавляю новый продукт, я перенаправляюсь на страницу редактирования продукта на панели инструментов Dokan. Мои навыки php очень ограничены, так как это первый раз, когда я делаю кодирование, но я быстро разбираюсь.
Может кто-нибудь помочь мне с этим вопросом?
Это конец кода, который отображается шорткодом (после кнопки отправки).
</form>
<?php } else { ?>
<?php dokan_seller_not_enabled_notice(); ?>
<?php } ?>
<?php } else { ?>
<?php do_action( 'dokan_can_post_notice' ); ?>
<?php } ?>
</div>
<?php
/**
* dokan_after_new_product_inside_content_area hook
*
* @since 2.4
*/
do_action( 'dokan_after_new_product_inside_content_area' );
?>
</div> <!-- #primary .content-area -->
<?php
/**
* dokan_dashboard_content_after hook
* dokan_after_new_product_content_area hook
*
* @since 2.4
*/
do_action( 'dokan_dashboard_content_after' );
do_action( 'dokan_after_new_product_content_area' );
?>
3 ответа
Добавьте этот код в functions.php вашей дочерней темы.
Сначала мы удаляем действие ajax по умолчанию, затем добавляем наше пользовательское действие с той же функцией, но с измененным значением $redirect.
if ( wp_doing_ajax() ) {
remove_action( 'wp_ajax_dokan_create_new_product', array( 'WeDevs\Dokan\Ajax', 'create_product' ) );
add_action( 'wp_ajax_dokan_create_new_product', 'dokan_ajax_create_product' );
}
function dokan_ajax_create_product() {
check_ajax_referer( 'dokan_reviews' );
if ( ! current_user_can( 'dokan_add_product' ) ) {
wp_send_json_error( __( 'You have no permission to do this action', 'dokan-lite' ) );
}
$submited_data = isset( $_POST['postdata'] ) ? wp_unslash( $_POST['postdata'] ) : ''; //phpcs:ignore
parse_str( $submited_data, $postdata );
$response = dokan_save_product( $postdata );
if ( is_wp_error( $response ) ) {
wp_send_json_error( $response->get_error_message() );
}
if ( is_int( $response ) ) {
/* if ( current_user_can( 'dokan_edit_product' ) ) {
$redirect = dokan_edit_product_url( $response );
} else { */
$redirect = dokan_get_navigation_url( 'products' );
/* } */
wp_send_json_success( $redirect );
} else {
wp_send_json_error( __( 'Something wrong, please try again later', 'dokan-lite' ) );
}
}
И для запросов без ajax:
add_action( 'dokan_add_new_product_redirect', 'custom_dokan_add_new_product_redirect', 10, 2 );
function custom_dokan_add_new_product_redirect( $redirect, $product_id ) {
$redirect = dokan_get_navigation_url( 'products' );
return $redirect;
}
В новой версии Dokan вы можете настроить это в файле dokan-lite/includes/Dashboard/Templates с помощью приведенного выше кода!
Отредактируйте этот файл public_html/wp-content/plugins/dokan-lite/classes/template-products.php
do_action( 'dokan_new_product_added', $product_id, $post_data );
if ( current_user_can( 'dokan_edit_product' ) ) {
$redirect = dokan_edit_product_url( $product_id );
} else {
$redirect = dokan_get_navigation_url( 'products' );
}
Просто замените значение $redirect на ваш собственный URL, как показано ниже
$redirect = ("https://www.wordpress.com/dashboard/products/");
Для перенаправления после редактирования страницы продукта замените то же самое ниже
do_action( 'dokan_product_updated', $post_id );
//$edit_url = dokan_edit_product_url( $post_id );
$redirect = apply_filters( 'dokan_add_new_product_redirect', dokan_edit_product_url( $post_id ), $post_id );
wp_redirect( add_query_arg( array( 'message' => 'success' ), $redirect ) );
exit;