web-dev-qa-db-fra.com

Est-il possible de supprimer le format de publication "standard"?

J'utilise énormément les formats de publication sur un projet, mais je n'ai actuellement pas besoin de l'option standard. Au-delà d'être un élément inutile de l'interface utilisateur, cela provoque en fait un comportement défectueux s'il est sélectionné par erreur. Je pourrais, avec une logique compliquée, être en mesure de configurer un modèle pour Standard qui gère correctement le contenu entrant d'autres formats, mais tout ce que vous feriez, c'est de cacher le fait que les publications sont affectées de manière incorrecte, ce qui les rend encore plus difficiles à traquer. . (Et cette solution de contournement peut ou peut ne pas être toujours viable.) Le vrai problème est que le bouton radio ne devrait tout simplement pas être là.

La seule option que j'ai vue pour supprimer le support de format de quelque manière que ce soit est remove_theme_support('post-formats'), qui supprime complètement la fonctionnalité. Je veux juste que cette option disparaisse.

5
Su'

La première chose à retenir à propos de l'écran de post-édition est que tout (à l'exception du titre, des éditeurs, du permalien, etc.) est une méta-boîte. Comme vous pouvez facilement ajouter et supprimer des méta-boîtes, inutile de recourir au piratage CSS et JS. Vous ne voulez pas que le format de message standard apparaisse? Supprimez la boîte à méta par défaut et lancez votre propre.

Accrochez tout d'abord dans add_meta_boxes_{$post_type} et supprimez l'ancien format div, puis ajoutez le vôtre.

<?php
add_action( 'add_meta_boxes_post', 'wpse41940_meta_boxes' );
function wpse41940_meta_boxes( $post )
{
    remove_meta_box(
        'formatdiv',
        $post->post_type,
        'side'
    );
    add_meta_box( 
        'wpse41940_formatdiv', 
        _x( 'Format', 'post format' ), 
        'wpse41940_format_meta_box', 
        $post->post_type, 
        'side', 
        'core' 
    );
}

Vous pouvez trouver le code de la boîte méta de format de message par défaut dans wp-admin/includes/meta-boxes.php dans la fonction post_format_meta_box. C'est ici:

<?php
function post_format_meta_box( $post, $box ) {
    if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) ) :
    $post_formats = get_theme_support( 'post-formats' );

    if ( is_array( $post_formats[0] ) ) :
        $post_format = get_post_format( $post->ID );
        if ( !$post_format )
            $post_format = '0';
        // Add in the current one if it isn't there yet, in case the current theme doesn't support it
        if ( $post_format && !in_array( $post_format, $post_formats[0] ) )
            $post_formats[0][] = $post_format;
    ?>
    <div id="post-formats-select">
        <input type="radio" name="post_format" class="post-format" id="post-format-0" value="0" <?php checked( $post_format, '0' ); ?> /> <label for="post-format-0"><?php _e('Standard'); ?></label>
        <?php foreach ( $post_formats[0] as $format ) : ?>
        <br /><input type="radio" name="post_format" class="post-format" id="post-format-<?php echo esc_attr( $format ); ?>" value="<?php echo esc_attr( $format ); ?>" <?php checked( $post_format, $format ); ?> /> <label for="post-format-<?php echo esc_attr( $format ); ?>"><?php echo esc_html( get_post_format_string( $format ) ); ?></label>
        <?php endforeach; ?><br />
    </div>
    <?php endif; endif;
}

Le plus simple est de copier l'intégralité de la transaction, de renommer la fonction et de modifier les éléments à modifier. Nom, cela signifie changer ceci:

$post_format = get_post_format( $post->ID );
if ( !$post_format )
    $post_format = '0';

Pour ce faire, définissez le "format par défaut" de côté (ou celui que vous souhaitiez).

$post_format = get_post_format( $post->ID );
if ( !$post_format )
    $post_format = 'aside';

Nous devrons également supprimer cette ligne:

<input type="radio" name="post_format" class="post-format" id="post-format-0" value="0" <?php checked( $post_format, '0' ); ?> /> <label for="post-format-0"><?php _e('Standard'); ?></label>

Quel est le format de publication "standard". Le résultat final:

<?php
function wpse41940_format_meta_box( $post, $box )
{
    if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) ) :
    $post_formats = get_theme_support( 'post-formats' );

    if ( is_array( $post_formats[0] ) ) :
        $post_format = get_post_format( $post->ID );
        if ( !$post_format )
            $post_format = 'aside';
        if ( $post_format && !in_array( $post_format, $post_formats[0] ) )
            $post_formats[0][] = $post_format;
    ?>
    <div id="post-formats-select">
        <?php foreach ( $post_formats[0] as $format ) : ?>
        <input type="radio" name="post_format" class="post-format" id="post-format-<?php echo esc_attr( $format ); ?>" value="<?php echo esc_attr( $format ); ?>" <?php checked( $post_format, $format ); ?> /> <label for="post-format-<?php echo esc_attr( $format ); ?>"><?php echo esc_html( get_post_format_string( $format ) ); ?></label><br/>
        <?php endforeach; ?><br />
    </div>
    <?php endif; endif;
}

Enfin, il serait judicieux de vous assurer que get_post_format ne renvoie jamais la valeur false, ou plutôt votre format par défaut en l'absence de format. Les formats de publication ne sont qu'une taxonomie, nous pouvons donc nous connecter à get_the_terms et nous assurer que nous avons toujours un format de publication. Les formats sont créés au fur et à mesure que les publications y sont ajoutées. Nous devons donc ajouter la taxonomie si elle n'existe pas déjà.

<?php
add_filter( 'get_the_terms', 'wpse41940_filter_formats', 10, 3 );
function wpse41940_filter_formats( $terms, $post_id, $taxonomy )
{
    if( 'post_format' != $taxonomy ) return $terms;
    if( empty( $terms ) )
    {
        $aside = get_term_by( 'slug', 'post-format-aside', 'post_format' );
        // post formats are created as posts are saved in them.
        // so this is a bit of a hack
        if( $aside )
        {
            $terms[] = $aside;
        }
        else
        {
            $term = wp_insert_term( 'post-format-aside', 'post_format' );
            $terms[] = get_term( $term['term_id'], 'post_format' );
        }
    }
    return $terms;
}

Voici tout ce que sous forme de plugin .

6
chrisguitarguy

Basé sur votre commentaire:

Parce que si quelque chose se termine dans ce format, le modèle sera mauvais (à des degrés divers selon la personnalisation des autres formats), et il n'y a pas de bonne façon de le savoir sans visiter chaque message et en sachant qu'il est censé être dans certains autre format. Il n'y a pas non plus de raison de créer un modèle standard (dans mon cas, il ne sera jamais utilisé; oui, vraiment). Si je le faisais, la solution de rechange ne serait peut-être toujours pas satisfaisante, et comme je l'ai dit, cela ne ferait qu'aggraver le problème de découverte, car les éléments de la norme ne sembleront pas aussi faux.

Je pense que l'approche la plus correcte est pour vous de ne pas utiliser la taxonomie Post Format du tout ; vous devriez plutôt utiliser votre propre taxonomie personnalisée . Vous n'utilisez pas la taxonomie Post Format telle qu'elle est censée être utilisée et elle ne sert pas vos objectifs; alors, pourquoi essayer de forcer une cheville carrée dans un trou rond?

Enregistrez simplement votre propre taxonomie (enfin, copiez même les bits utiles du code d’enregistrement de taxonomie au format post) et omettez complètement le terme/traitement "standard".

2
Chip Bennett

Il s’agit d’une solution de contournement semi-automatique, mais je pense que cela répond à tous vos besoins. Commencez par implémenter la logique de modèle afin de gérer le cas où, pour une raison quelconque, une publication est définie comme format de publication "Standard".

$format = get_post_format();
if ( false === $format ) // post format is 'standard'
    $format = 'aside'; // set it instead to 'aside' (or whatever you want)
<?php get_template_part( 'content', $format ); ?>

Ensuite, créez un plugin simple qui ajoutera des CSS et JS personnalisés à votre interface d’administration. Créez un répertoire "myplugin" sous/wp-content/plugins et placez ce code dans "myplugin.php":

<?php
/*
Plugin Name: My Admin Theme
Plugin URI: http://yoursite.com
Description: My WordPress Admin Theme - Add Custom CSS and JS.
Author: Your Name
Version: 1.0
*/

function my_admin_head() {
        echo '<link rel="stylesheet" type="text/css" href="' .plugins_url('wp-admin.css', __FILE__). '">';
        echo '<script type="text/javascript" src="' .plugins_url('wp-admin.js', __FILE__). '"></script>';
}

add_action('admin_head', 'my_admin_head');
?>

Ensuite, également dans le dossier/myplugin /, créez les fichiers wp-admin.css et wp-admin.js référencés ci-dessus.

Dans wp-admin.css, mettez des styles pour supprimer l’option "Standard" qui ne serait pas vue par vos auteurs:

/* Custom styles to remove the Standard option from the view in the post page */
#post-formats-select input:nth-child(1),
#post-formats-select label:nth-child(2),
#post-formats-select br:nth-child(3) {
    display:none;
}

Enfin, dans wp-admin.js, placez une ligne de code JavaScript permettant de sélectionner le format de publication que les utilisateurs doivent utiliser par défaut.

jQuery(document).ready(function() {
    jQuery('input:radio[name=post_format][value=aside]').click();
});

Cette approche a pour inconvénient de ne pas supprimer le format de publication standard dans WP, mais de le masquer à vos auteurs à l'aide de JavaScript et de CSS. Si l'auteur n'a pas activé JS dans son navigateur, la publication "Standard" sera toujours sélectionnée par défaut. Je pense cependant que c'est toujours la meilleure et la seule solution à ce problème.

Bonne chance!

1
GavinR

Est-ce que cela ne suffit pas d’ajouter le format de publication et de filtrer via le tableau de formats de publication autorisés? peut-être que je ne comprends pas la question qui ne va pas.

dans functions.php du thème; format de message autorisé pour Aside et Image.

add_theme_support( 'post-formats', array( 'aside', 'image' ) );

0
bueltge