Adicionando um captcha do slider ao sistema de comentários

QapTcha é um sistema de captcha jQuery que pode ser arrastado . Eu tenho tentado criar um plugin para fazê-lo funcionar no sistema de comentários do WordPress. Encontrei um plugin que já está fazendo isso, mas é outofdate e não usa a versão QapTcha mais recente.

As versões anteriores não funcionam em canvass sensíveis ao toque, portanto, a versão mais recente é essencial. Então, usei o plugin como um modelo e atualizei todos os arquivos de acordo, mas não importa o que eu faça, o controle deslizante QapTcha não aparece no formulário de comentário.

Aqui está um pouco do script PHP:

function my_scripts_method() { wp_deregister_script( 'jquery' ); wp_deregister_script( 'jquery ui' ); wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js'); wp_register_script( 'jquery ui', 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/jquery-ui.min.js'); wp_enqueue_script( 'jquery' ); wp_enqueue_script( 'jquery ui' ); } function myQaptcha_wp_footer() { if (is_singular() && !is_user_logged_in()) { $url = get_bloginfo("wpurl"); $outer = ''."\n"; $outer.= ''."\n"; $outer.= 'var myQaptchaJqueryPage="' . $url . '/wp-content/plugins/myqaptcha/jquery/myQaptcha.jquery.php";'."\n"; $outer.= ''."\n"; $outer.= 'jQuery(document).ready(function(){if(jQuery("p:has(\'textarea\')").length>0) jQuery("p:has(\'textarea\')").before(\'
\'); else jQuery("#comment").before(\'
\');jQuery(\'.QapTcha\').QapTcha({disabledSubmit:true,autoRevert:true});});'."\n"; echo $outer; } } function myQaptcha_preprocess_comment($comment) { if (!is_user_logged_in()) { if(!session_id()) session_start(); if ( isset($_SESSION['30corg']) && $_SESSION['30corg']) { unset($_SESSION['30corg']); return($comment); } else { if (isset($_POST['isajaxtype']) && $_POST['isajaxtype'] > -1) { //header('HTTP/1.1 405 Method Not Allowed'); clove find some error with ajax submit 2012-03-02 die("请滑动滚动条解锁"); } else { if(function_exists('err')) err("请滑动滚动条解锁"); else wp_die("请滑动滚动条解锁"); } } } else { return($comment); } } add_action('wp_enqueue_scripts', 'my_scripts_method'); add_action('wp_footer', 'myQaptcha_wp_footer'); add_action('preprocess_comment', 'myQaptcha_preprocess_comment');

Verifiquei o guia de implementação do Qaptcha e tudo está definido corretamente. O único que pode estar errado é talvez quando o jQuery é executado …? Posicionei o meu projeto de plugin, basta encontrar o botão de download aqui e adicione-o ao seu site se quiser testá-lo.

Você pode me ajudar a descobrir por que o controle deslizante não aparece? Deve haver um erro em algum lugar …

Editar : Aqui está um link ao resultado gerado: http://bogsorken.com/wpse/wordpress/?p=1

Solutions Collecting From Web of "Adicionando um captcha do slider ao sistema de comentários"

Primeiro, primeiro, há um pouco de _doing_it_wrong() no script enqueueing.

Não substitua os scripts agrupados no núcleo

Tente remover este retorno de chamada do gancho e veja se isso corrige as coisas:

 function my_scripts_method() { wp_deregister_script( 'jquery' ); wp_deregister_script( 'jquery ui' ); wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js'); wp_register_script( 'jquery ui', 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/jquery-ui.min.js'); wp_enqueue_script( 'jquery' ); wp_enqueue_script( 'jquery ui' ); } add_action('wp_enqueue_scripts', 'my_scripts_method'); 

Os scripts agrupados no núcleo nunca devem ser superados por Plugins ou Temas. A substituição da versão incorporada do núcleo com alguma outra versão pode causar problemas.

Enqueue Plugin-bundled scripts corretamente

Esses scripts devem ser encaminhados por retorno de chamada, incorporados em uma ação apropriada:

 function myQaptcha_wp_footer() { if (is_singular() && !is_user_logged_in()) { $url = get_bloginfo("wpurl"); $outer = ''."\n"; $outer.= ''."\n"; $outer.= ''."\n"; $outer.= ''."\n"; $outer.= ''."\n"; echo $outer; } } 

Tente isso em vez disso:

 function wpse73486_enqueue_myQaptcha_scripts() { if ( is_singular() && ! is_user_logged_in() ) { $url = plugin_dir_url( plugin_basename( __FILE__ ) ); wp_enqueue_style( 'qapcha-jquery', $url . '/jquery/myQaptcha.jquery.css' ); wp_enqueue_script( 'qaptcha-jquery', $url . '/jquery/myqaptcha.jquery.js', array( 'jquery' ), '', true ); wp_enqueue_script( 'jquery-touch-punch' ); // etc. } } add_action( 'wp_enqueue_scripts', 'wpse73486_enqueue_myQaptcha_scripts' ); 

Mover o código do script para um arquivo, para que ele possa ser entacued

Crie um novo arquivo, como qaptcha.script.js , e coloque o código de script personalizado dentro. Se o código requer jQuery e PHP, coloque-o dentro de um arquivo PHP, como qaptcha.script.php , para que você tenha access às funções do WordPress dentro do arquivo.

Use o script atualizado com núcleo

WordPress 3.4 agora é fornecido com jquery-ui-touch-punch . Talvez seja necessário enqueue / use-o em vez da biblioteca jquery-ui-touch incluída no Plugin.