Help > Forum > Temas y publicaciones > Limitar el número de palabras en una publicación

Limitar el número de palabras en una publicación

Puedes establecer un límite de palabras para los temas o respuestas nuevos siguiendo los pasos que se indican a continuación. Aparecerá un contador de palabras debajo del cuadro de texto para ayudar a los usuarios a mantenerse dentro del límite y no podrán enviar sus publicaciones si lo superan. Los moderadores y administradores están exentos de este límite.

  1. Inicie sesión en su cuenta de Website Toolbox.
  2. Haga clic en el Integrar enlace en el menú principal.
  3. Haga clic en el HTML enlace.
  4. Copia el código HTML que aparece a continuación en el Código HTML de la etiqueta principal del foro cuadro de texto.

    <script>
    var maximumWords = 100;
    window.addEventListener("load", function () {
    	if (!isAdministratorOrModerator()) {	
    		if(jQ("#PostTopic").length) {
    			waitForEditor("message", function () {
    				setupWordCountObserver("message");
    			});
    			jQ("#post_submit, #previewpost_sbt").on("click", function () {
    				if (showErrorMessage("message") === 1) {
    					return false;
    				} else {
    					removeWordCountMessage("message");
    				}
    			});
    		}    
    		if (jQ("#posts-list").length) {
    			checkEditorLoaded();
    			jQ("#reply_submit, #submitreply").on("click", function () {
    				if (showErrorMessage("message") === 1) {
    					return false;
    				} else {
    					removeWordCountMessage("message");
    				}
    			});
    			jQ(document).on("click", "[id^='save_']", function () {
    				var savePostId = jQ(this).closest(".post-body-content").find("textarea").attr("id");
    				savePostId = savePostId.replace("message", "");
    				var postEditEditorId = "message" + parseInt(savePostId);
    				if (showErrorMessage(postEditEditorId) === 1) {
    					var editor = tinymce.get(postEditEditorId);
    					if (editor && editor.startContent) {
    						editor.setContent(editor.startContent);
    					}
    					return false;
    				} else {
    					removeWordCountMessage(postEditEditorId);
    				}
    			});
    		}
    	}
    });
    
    function checkEditorLoaded() {
    	const observer = new MutationObserver((mutations, obs) => {
    		for (const mutation of mutations) {
    			for (const node of mutation.addedNodes) {
    				if (node.nodeType === 1 && /^message\d*_ifr$/.test(node.id)) {
    					var messageId = node.id.replace("_ifr", "");
    					waitForEditor(messageId, function () {
    						setupWordCountObserver(messageId);
    					});
    				}
    			}
    		}
    	});
    	observer.observe(document.body, {
    		childList: true,
    		subtree: true
    	});
    }
    
    function waitForEditor(id, callback) {
    	const interval = setInterval(() => {
    		const editor = tinymce.get(id);
    		if (editor && editor.initialized) {
    			clearInterval(interval);
    			callback(editor);
    		}
    	}, 100);
    }
    
    function setupWordCountObserver(id) {
    	const editor = tinymce.get(id);
    	if (!editor) return;
    	showWordCountMessage(id); 
    	// Update message on any change
    	editor.on("input", function () {
    		showWordCountMessage(id);
    	});
    	editor.on("change", function () {
    		showWordCountMessage(id);
    	});
    	editor.on("undo redo paste", function () {
    		showWordCountMessage(id);
    	});
    }
    
    function isAdministratorOrModerator() {
        return jQ(".dropdown-menu .admin_user:not(.hidden)").length || jQ(".dropdown-menu .moderator_user:not(.hidden)").length;
    }
    
    function countWords(str) {
        return str
            .replace(/<\ ?a[^>]*>/g, '')
            .replace(/(<[^>]*>)+/gi, '')
            .replace(/&(.*?);/gi, ' ')
            .replace(/(^\s*)|(\s*$)/gi, '')
            .replace(/\n/g, ' ')
            .replace(/\s+/g, ' ')
            .trim()
            .split(' ')
            .filter(Boolean)
            .length;
    }
    
    function showErrorMessage(id) {
        let postContent = "";
        const editor = tinymce.get(id);
    
        if (editor) {
            postContent = editor.getContent();
        } else {
            postContent = jQ("#" + id).val();
        }
    
        const totalWord = countWords(postContent);
    
        if (!isAdministratorOrModerator() && totalWord > maximumWords) {
            wtbx.dialog.alert("Error: The text that you have entered is too long (" + totalWord + " words). Please shorten it to " + numberWithCommas(maximumWords) + " words.");
            return 1;
        }
    
        return 0;
    }
    
    function showWordCountMessage(id) {
        const editor = tinymce.get(id);
        if (!editor) return;
    
        const content = editor.getContent();
        const totalWord = countWords(content);
        let message = "";
        if (totalWord && totalWord <= '< (totalword + 100) else if message="<span style="color: #27415f !important; padding-top:10px; font-weight:bold;">" span>'; totalword { }> 100) {
            message = '<span style="color: #dc2f2f; padding-top:10px; font-weight:bold;">' + totalWord + '</span>';
        }
        if (message) {    
          	let wordText = 'word';
          	if(totalWord > 1) {
              wordText = 'words';
            }
            message = 'You\'ve typed ' + message + ' '+wordText+'. Your submission must not exceed ' + numberWithCommas(maximumWords) + ' words.';
        }
    
        const containerId = 'errorMessage' + id;
        const existingContainer = jQ('#' + containerId);
    
        if (!existingContainer.length) {
            const editorContainer = jQ(editor.iframeElement).closest('.mce-tinymce');
            editorContainer.after('
    ' + message + '
    '); } else { existingContainer.html(message); } } function removeWordCountMessage(id) { jQ('#errorMessage' + id).remove(); } function numberWithCommas(num) { return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); } </script> <style> #errorMessagemessage:has(span), #errorMessagemessage1:has(span) { font-size: 14px; color: #777; } #quickReplyPost #errorMessagemessage:has(span) ~ #reply_options { margin-top: -70px; } #quickReplyPost:has(#showCaptcha:not(.hidden)) #errorMessagemessage:has(span) ~ #reply_options { margin-top: -6px; } @media (max-width: 767px) { #quickReplyPost #errorMessagemessage:has(span) ~ #reply_options { margin-top: -87px; } } @media (max-width: 555px) { #quickReplyPost [id^="showCaptcha"]:not(.hidden) ~ .reply-menu .reply-options { margin-top: -187px; } } </style>
  5. En la segunda línea del código que copiaste o pegaste, cambia el número junto a Número máximo de palabras hasta el número máximo de palabras que quieras permitir.
  6. Guardar los cambios.


If you still need help, please contact us.