wordpress custom-post-types – ¿Cómo verifico si no se ha utilizado el mismo slug de publicación antes de publicar?

Pregunta:

Para una agenda de indie rock, creé publicaciones de eventos. Con la ayuda de javascript, los valores de los campos personalizados (bandas, lugares e información de fecha seleccionada en las casillas de selección) se copian como el título de la publicación al publicar o actualizar la publicación. También hay una función personalizada que actualiza el slug cada vez que cambia el título. . Problema: si otro usuario crea una nueva publicación seleccionando exactamente los mismos valores de campos personalizados, se crea otra publicación con exactamente el mismo slug. Y si se crean dos publicaciones con el mismo slug, ambas conducen a una página de error 404 hasta que una de ellas se elimina manualmente. Mi pregunta: ¿hay alguna manera de "validar" la publicación slug comparándola con las publicaciones más antiguas en la base de datos? Gracias por tu ayuda !

Respuesta:

El estilo Ajax (un poco sucio, pero puedes mejorarlo fácilmente)

En su functions.php (o en un complemento, o en cualquier otro lugar):

function my_ajax_update(){
    if (isset($_POST['title'])){
        global $wpdb;
        $title = esc_sql($_POST['title']);
        if(!$title) return;
        $page = $wpdb->get_results("
            SELECT *
            FROM $wpdb->posts
            WHERE post_title LIKE '$title'
            AND post_type = 'event'
            AND post_status = 'publish'
            LIMIT 1
        ");
        if ($page) echo "This title already exists !";
    }
}
add_action("wp_ajax_check_double_post", "my_ajax_update");

Y en algún lugar de su plantilla de metabox (o cargada a través de una acción):

jQuery(document).ready(function($){
    var the_title = $('#title').val();
    $('#publish').click(function(e){
        e.preventDefault();
        $.post(
            ajaxurl,
            {
                action:"check_double_post",
                title: the_title
            },
            function(data){
                if ((data) != 0) {
                    message = $('<div id="message" class="error below-h2" />').html('<p>Warning, this title already exists!</p>')
                    $('h2').after(message);
                    $('#ajax-loading').hide();
                    $('#publish').removeClass('button-primary-disabled');
                }
                else {
                    $(this).submit();
                }
            }
        );
    });
});

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım