web-dev-qa-db-fra.com

Comment publier un article avec un titre et un contenu vides?

Pourquoi je fais ce que vous pourriez demander? Je développe un site Web pour une entreprise avec un portefeuille où les éléments de la galerie sont des articles. Ces publications sont renseignées via des champs personnalisés et des sélections de catégories, rien d’autre.

Pour chaque article, il peut y avoir un titre/contenu ou non, cela dépend de l'article en question et cela dépend entièrement du client. Ce sont eux qui peuplent leur portefeuille et pas moi. Je suis en train de construire le système pour qu'ils publient facilement ce qu'ils veulent.

Je me rends compte que WordPress peut avoir des problèmes avec les publications sans titre, c'est pourquoi j'ai implémenté (dans functions.php) une fonction permettant de définir automatiquement un titre pour la publication si aucune n'a été attribuée. Le titre de cet article ne sera jamais affiché sur le site Web, car je le cherche et l'omets s'il est présent. Sinon, affichez le titre attribué à l'article.

La fonction pour cela est:

add_action('publish_post', 'insert_automatic_post_title', 10, 2);

function insert_automatic_post_title($postID, $post) {
    if($post->post_title === '') {
        $post->post_title = '['.get_the_date('d/m/Y @ H:i:s').']';

        if($post->post_name == $postID) {
            $post->post_name = sanitize_title($post->post_title);
        }

        $result = wp_update_post($post);
    }
}

Le seul problème est que si title est vide et que le contenu est également vide (avec certains champs personnalisés déjà définis), la fonction ci-dessus ne sera jamais appelée et le message ne sera pas publié, il restera en statut de projet.

La seule solution à laquelle je pouvais penser était de créer un shortcode tel que [empty_post] et de demander au client de le définir sur le contenu du message quand il ne souhaite pas attribuer un titre/contenu au message. Ce shortcode pourrait imprimer quelque chose comme <!-- EMPTY POST --> ou même rien du tout. Le fait qu'il y ait quelque chose dans le contenu du message, la fonction ci-dessus est appelée, un titre automatique est défini et le message est publié.

Mais je cherche un moyen où le client n'a pas besoin d'avoir plus de problèmes (c'est-à-dire: insérer un shortcode dans le contenu du message) que nécessaire, je veux que ce soit aussi simple que possible. Sans jouer avec le code source de WordPress bien sûr.

Quelqu'un peut-il penser d'une autre manière avec des actions/filtres?

3
Ricardo Amaral

Si le contenu, le titre et l'extrait de la publication sont vides WordPress empêchera l'insertion de la publication . Vous pouvez tromper WordPress en filtrant d’abord le tableau en entrée afin que les valeurs vides soient définies sur autre chose, puis en réinitialisant ces valeurs ultérieurement en chaînes vides. Cela contournera le contrôle standard.

add_filter('pre_post_title', 'wpse28021_mask_empty');
add_filter('pre_post_content', 'wpse28021_mask_empty');
function wpse28021_mask_empty($value)
{
    if ( empty($value) ) {
        return ' ';
    }
    return $value;
}

add_filter('wp_insert_post_data', 'wpse28021_unmask_empty');
function wpse28021_unmask_empty($data)
{
    if ( ' ' == $data['post_title'] ) {
        $data['post_title'] = '';
    }
    if ( ' ' == $data['post_content'] ) {
        $data['post_content'] = '';
    }
    return $data;
}
9
Jan Fabry

Une solution simple et rapide consisterait à utiliser javascript/jQuery ... effectuez une détection pour vérifier le type de message sur lequel il sera exécuté, puis procédez comme suit:

  1. trouver le champ du titre de l'article

  2. masquer le champ du titre de l'article

  3. remplir automatiquement le champ du titre de l'article

De toute façon, l'essentiel du backend wordpress fonctionne avec javascript, et la probabilité qu'un utilisateur utilise l'administrateur sans JS est faible. Et même si cela se produit, vous pouvez détecter et ajouter un avertissement/message de quelque sorte.

0
farinspace

Je voudrais juste les envelopper dans des DIV et utiliser display:none dans mon CSS.

0
AndrettiMilas

Ce plugin ( Auto Title ) est obsolète, mais il fonctionne bien pour mon installation de WP 4.3.1. Cela pourrait vous aider à renseigner le titre avec des champs personnalisés et des sélections de catégories conformément à votre mémoire.

0
Pete