web-dev-qa-db-fra.com

Comment faire un shortcode pour masquer la sélection de texte d'une publication ou d'une page?

existe-t-il un shortcode ou un plugin qui ajoute un nouvel identifiant, comme dans l'exemple suivant:

[hidemytext] du texte caché [/ hidemytext]

et tout texte à l'intérieur de cette balise est caché de la publication ou de la page.

Merci et salutations

3
user25236

Réponse simple:

add_shortcode( 'hidemytext', '__return_false' );

Mais les codes courts ne devraient jamais être utilisés comme ça. Imaginez ce qui se passe lorsque le plugin ou le thème avec ce shortcode est désactivé: tout le monde peut voir le contenu maintenant. Ce n'est pas très convivial.

Changez donc la logique: ne rien afficher ou la balise shortcode nue par défaut, affichez le contenu uniquement si le gestionnaire de shortcode est actif. Stockez le contenu caché dans une simple métabox:

enter image description here

Pour ce faire, ajoutez une metabox avec un éditeur et affichez son contenu par shortcode:

add_shortcode( 'extra',  't5_extra_content' );
add_action( 'add_meta_boxes_post', 't5_register_extra_metabox' );
add_action( 'save_post', 't5_save_shortcode_box', 10, 2);

function t5_extra_content( $attributes, $content = '' )
{
    $args = shortcode_atts( array ( 'cap' => 'edit_posts' ), $attributes );

    if ( current_user_can( $args['cap'] ) )
        return wpautop(
            get_post_meta( get_the_ID(), '_t5_extra_box', TRUE )
            . $content
        );
}

function t5_register_extra_metabox()
{
    add_meta_box(
        't5_extra',
        'Extra',
        't5_extra_metabox_callback',
        NULL, // screen
        'normal',
        'default'
    );
}
function t5_extra_metabox_callback( $post )
{
    $nonce = wp_create_nonce( __FILE__ );
    echo "<input type='hidden' name='t5_extra_box_nonce' value='$nonce' />";
    $content = get_post_meta($post->ID, '_t5_extra_box', TRUE );
    wp_editor(
        $content,
        '_t5_extra_box',
        array (
            'textarea_rows' => 10,
            'media_buttons' => FALSE,
            'teeny'         => TRUE,
            'tinymce'       => TRUE
        )
    );
}
function t5_save_shortcode_box( $post_id )
{
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE
        or ! isset ( $_POST['post_type'] )
        or 'post' !== $_POST['post_type']
        or ! current_user_can( 'edit_post', $post_id )
        or ! wp_verify_nonce( $_POST[ 't5_extra_box_nonce' ], __FILE__ )
    )
    {
        return;
    }

    if ( isset ( $_POST['_t5_extra_box'] ) )
        update_post_meta( $post_id, '_t5_extra_box', $_POST['_t5_extra_box'] );
    else
        delete_post_meta( $post_id, '_t5_extra_box' );
}
6
fuxia

Vous devriez vraiment pouvoir travailler à partir de les exemples du Codex .

function hide_text( $atts,$content) {
  return ''; // returns nothing
  // or
  return '<!-- '.$content.' -->'; // returns an html commented version of your text
}
add_shortcode( 'hidemytext', 'hide_text' );
1
s_ha_dum

Vous pouvez configurer un crochet de filtre et filtrer tout le contenu de la publication. La fonction accrochée renverrait un contenu de type par défaut "Non autorisé" ou, si le visiteur en avait l'autorisation, la fonction renverrait le contenu de publication réel.

Je suis sur le point d'implémenter quelque chose dans TwitchPress qui pourrait utiliser cette approche mais aller encore plus loin. Je pourrais détecter un bloc spécifique (essentiellement, détecter les blocs tags/html) et masquer tout le contenu après ce bloc. Cela permet une certaine flexibilité lors de la création de publications.

L'approche avec un bloc n'est pas très différente de votre propre idée. Le bloc fait tout glisser et déposer au lieu de taper [masquer] ou quelque chose de similaire. Quelle que soit l'approche choisie, le contenu de la publication nécessite un filtrage. Je suis préoccupé par le traitement supplémentaire par opposition à la restriction de la publication entière et à la redirection des utilisateurs non autorisés vers une page "Non autorisée" standard, effectuée lors de l'initialisation de WordPress.

Donc, il y a beaucoup d'approches. Les performances et la flexibilité seront différentes dans chaque cas. Je pense que je vais tous les implémenter dans TwitchPress.

0
Ryan Bayne