WordPress

wtyczki — Pokaż podobne tytuły postów (podobne do Stack Exchange)

  • 29 grudnia, 2011
  • 3 min read
wtyczki — Pokaż podobne tytuły postów (podobne do Stack Exchange)


Dzięki temu dotrzesz do celu, ale rzeczywiste wyszukiwanie nie jest doskonałe. Byłoby wspaniale, gdyby ktoś, kto wie więcej o $wpdb, mógł pomóc uzyskać lepszy wynik.

Jeśli to jest mój oryginalny tytuł postu: SOPA nie żyje, hurra!

Wtedy znajdzie go tylko tytuł „SOPA”, podobnie jak tytuł „nie żyje” ale nie „Ding dong, wiedźma nie żyje” lub „SOPA to zły pomysł”.

Jednak podstawowym założeniem jest dodanie przycisku do „Sprawdź tytuł”, a po naciśnięciu tytuł jest publikowany za pomocą jQuery i obsługiwany przez AJAX w celu zwrócenia pasujących tytułów, z wyjątkiem bieżącego postu. Jeśli możesz to wykorzystać i zmodyfikować, aby uzyskać lepsze dopasowania, udostępnij!

Oto podstawowy kod wtyczki, a następnie jQuery, który powinien zostać zawarty w folderze wtyczki w pliku o nazwie duptitles.js

/*
Plugin Name: Duplicate Titles Check
Description: Prevent user's using similar post titles.
Version: 1.0
Author: 5t3ph
Author URI: 
*/

//jQuery to send AJAX request - only available on the post editing page
function dup_titles_enqueue_scripts( $hook ) {

    if( !in_array( $hook, array( 'post.php', 'post-new.php' ) ) )
        return;

    wp_enqueue_script( 
        'duptitles',
        plugins_url( '/duptitles.js', __FILE__ ),
        array( 'jquery' )
    );
}
add_action( 'admin_enqueue_scripts', 'dup_titles_enqueue_scripts', 2000 );


// Invoke baked-in WP ajax goodness
// Codex: 
add_action('wp_ajax_title_check', 'title_check_callback');

function title_check_callback() {

    function title_check() {

        $title = $_POST['post_title'];
        $post_id = $_POST['post_id'];

        global $wpdb;

        $sim_titles = "SELECT post_title 
                    FROM $wpdb->posts 
                    WHERE post_status="publish" AND post_type="post" 
                    AND post_title LIKE '%{$title}%' 
                    AND ID != {$post_id}";

        $sim_results = $wpdb->get_results($sim_titles);

        if($sim_results) {
            $titles="<ul>";
            foreach ( $sim_results as $the_title ) 
            {
                $titles .= '<li>'.$the_title->post_title.'</li>';
            }
            $titles .= '</ul>';

            return $titles;
        } else {
            return '<p>This title is unique</p>';
        }
    }

    echo title_check();

    die();
}

Rozpocznij jQuery dla duptitles.js

jQuery(document).ready(function($){
    // Post function
    function checkTitle(title, id) {
        var data = {
            action: 'title_check',
            post_title: title,
            post_id: id
        };

        //var ajaxurl="wp-admin/admin-ajax.php";
        $.post(ajaxurl, data, function(response) {
            $('#message').remove();
            $('#poststuff').prepend('<div id=\"message\" class=\"updated fade\"><p>'+response+'</p></div>');
        }); 
    };

    // Add button to "Check Titles" below title field in post editor
    $('#edit-slug-box').append('<span id="check-title-btn"><a class="button" href="#">Check Title</a></span>');

    // Click function to initiate post function
    $('#check-title-btn a').click(function() {
        var title = $('#title').val();
        var id = $('#post_ID').val();
        checkTitle(title, id);
    });

});


Źródło

Warto przeczytać!  3 ciekawe trendy z WordCamp Asia – Wiadomości WordPress