如何编写快捷代码来隐藏从帖子或页面中选择的文本?

时间:2012-12-26 作者:user25236

是否有任何短代码或插件可以添加新的quicktag,如以下示例:

[隐藏文本]一些隐藏文本

这些标签中的任何文本都会隐藏在帖子或页面中。

谢谢和问候

3 个回复
SO网友:fuxia

简单回答:

add_shortcode( \'hidemytext\', \'__return_false\' );
但决不能像那样使用短代码。想象一下,当带有该短代码的插件或主题被关闭时会发生什么:现在每个人都可以看到内容了。这对用户不是很友好。

因此,切换逻辑:默认情况下不显示任何内容或裸露的短代码标记,仅当短代码处理程序处于活动状态时才显示内容。将隐藏内容存储在简单的元数据库中:

enter image description here

要做到这一点,请添加一个带有编辑器的元盒,并按短代码显示其内容:

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\' );
}

SO网友:s_ha_dum

你真的应该能从the examples in the 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\' );

SO网友:Ryan Bayne

您可以设置过滤器挂钩并过滤所有帖子内容。挂钩函数将返回默认的“不允许”类型的内容,或者如果访问者有权限,该函数将返回实际的帖子内容。

我将在TwitchPress中实现一些可能使用这种方法的东西,但要更进一步。我可能会检测一个特定的块(基本上是检测块标记/html),并隐藏该块之后的所有内容。这允许在创作帖子时具有一定的灵活性。

使用块的方法与您自己的想法没有太大不同。该块只是将其全部拖放,而不是键入[隐藏]或类似的内容。无论采用哪种方法,帖子内容都需要过滤。我担心的是额外的处理,而不是限制整个帖子,并将不允许的用户重定向到标准的“不允许”页面,这是在WordPress初始化时完成的。

所以有很多方法。性能和灵活性各不相同。我想我会在TwitchPress中实现它们。

结束

相关推荐

qtranslate arabic shortcode?

我在我的网站上使用了qTranslate。四种语言选择。English Russian Turkish Arabic 但阿拉伯语不行。我尝试了以下url:site.com/ar 但它仍然不起作用。显示如下错误:警告:无法修改标题信息-标题已由/home/useruser/public\\u html/www.site.com/blog/wp-content/themes/tema/index.php:1)在/home/useruser/public\\u html/www