web-dev-qa-db-fra.com

Exiger un titre pour les pages

Existe-t-il un moyen de forcer les utilisateurs à écrire un titre de page avant de publier? J'ai trouvé des exemples d'exiger des titres d'articles, mais pas des titres de pages.

2
Cody

Commencez par télécharger le plugin appelé Force Post Title .

Voici le plugin avec une ligne (2 avec la ligne de commentaire) ajouté au bas, basé sur nos commentaires.

En fait, un petit script jQuery est ajouté à la pageCreate Post/Page. Le script vérifiera si le champ de titre est vide lorsque l'utilisateur clique sur le bouton d'envoi.

Comme il s'agit d'un petit plugin, vous pouvez facilement le modifier et le copier sur votre functions.php. De cette façon, vous ne devrez pas éditer un plugin existant qui vous donnera mal à la tête une fois que vous le mettrez à jour ultérieurement.

Je dois également mentionner que j'ai trouvé quelque chose (un filtre) qui pourrait fonctionner dans wp-includes/post.php, rangée 2489 . J'ai fait quelques tests rapides sans résultat cependant.

/*
Plugin Name: Force Post Title
Plugin URI: http://appinstore.com
Description: Forces user to assign a Title to a post before publishing 
Author: Jatinder Pal Singh
Version: 0.1
Author URI: http://appinstore.com/
*/ 
function force_post_title_init() 
{
  wp_enqueue_script('jquery');
}
function force_post_title() 
{
  echo "<script type='text/javascript'>\n";
  echo "
  jQuery('#publish').click(function(){
        var testervar = jQuery('[id^=\"titlediv\"]')
        .find('#title');
        if (testervar.val().length < 1)
        {
            jQuery('[id^=\"titlediv\"]').css('background', '#F96');
            setTimeout(\"jQuery('#ajax-loading').css('visibility', 'hidden');\", 100);
            alert('POST TITLE is required');
            setTimeout(\"jQuery('#publish').removeClass('button-primary-disabled');\", 100);
            return false;
        }
    });
  ";
   echo "</script>\n";
}
add_action('admin_init', 'force_post_title_init');
add_action('edit_form_advanced', 'force_post_title');
// Add this row below to get the same functionality for page creations.
add_action('edit_page_form', 'force_post_title');
5
hampusn

Je viens de modifier @hampusn pour répondre à cette question afin d'améliorer l'intégration. Au lieu d'utiliser une alert(), il place une boîte joliment formatée sous le titre.

Il encapsule le code jQuery avec la fonction standard .ready().

Je voulais aussi le faire uniquement pour un certain type de message personnalisé. J'ai donc laissé l'extrait de code, mais vous pouvez simplement supprimer la vérification $post_type si les futurs lecteurs n'en ont pas besoin.

Enfin, j'ai enveloppé le message de validation dans _(). Vous pouvez théoriquement personnaliser ce type par publication si vous souhaitez le réaffecter dans l'instruction if principale.

function rtp_force_post_title_init() 
{
  wp_enqueue_script('jquery');
}
function rtp_force_post_title( $post ) 
{
  $post_type = get_post_type();
  $validation_message = _("The title field must be filled out.");

  if('exhibitor' === $post_type) {
    echo "<script type='text/javascript'>\n";
    echo "
    jQuery( document ).ready(function() {
      jQuery('#publish').click(function(){
        var testervar = jQuery('[id^=\"titlediv\"]').find('#title');
        if (testervar.val().length < 1)
        {
          setTimeout(\"jQuery('#ajax-loading').css('visibility', 'hidden');\", 100);
          var validator_snippet = '<div style=\"padding: 10px; color: #fff; margin-top: -3px; background: #F55E4F;\">" . $validation_message . "</div>';                    
          jQuery('[id^=\"titlediv\"]').find('#titlewrap').append(validator_snippet);          
          setTimeout(\"jQuery('#publish').removeClass('button-primary-disabled');\", 100);
          return false;
        }
      });
    });\n";
    echo "</script>\n";
  }
}
add_action( 'admin_init', 'rtp_force_post_title_init' );
add_action( 'edit_form_after_title', 'rtp_force_post_title' );
0
rtpHarry