带有定制(灵活)输出的快捷码/插件

时间:2013-05-24 作者:Maxim Zubarev

下面的场景:我正在构建一个主题框架,我想在我的各种主题中重用它。在这个框架中,有许多短代码的集合。为了举例说明我的问题,假设其中一个短代码获取最近的帖子([最近的帖子])并显示它们。

现在,也许我有时想在帖子缩略图上显示帖子标题,有时想在帖子缩略图下显示帖子标题,有时想显示帖子日期,有时不想。简而言之,我需要一些(尽可能方便的)方法来更改输出代码,同时保持短代码逻辑本身不变。

请查看具体描述的用例的确切要点:https://github.com/dotwired/Inferno/blob/master/inc/class-shortcodes.php#L591 (我希望灵活的代码从标记的第591行开始,到第595行结束)。我想出了以下方法:

  • apply_filters():<专业:感觉像是在做“WordPress方式”
  • a checking for a template file via file_exists() and then including:
    • pro:简单且功能强大,相反:需要为每个短代码添加一个文件,我希望HTML具有灵活性,并且这些文件都应该位于框架目录之外。而且,这肯定不是“WordPress方式”a template string:<不需要额外的文件或模块化代码,只需在短代码本身中指定HTML即可。相反,在短代码逻辑方面,尤其是在可用性方面,很容易变得过于复杂
  • 2 个回复
    最合适的回答,由SO网友:fuxia 整理而成

    您甚至没有提到的第一个问题是:您正在将短代码添加到主题中。Shortcodes are pure plugin territory, 因为他们正在改变帖子内容,而且必须在主题切换后生存下来。

    一旦您修复了这个问题并将短代码移动到名为inferno_shortcodes, 剩下的很简单:

    在插件中请求主题支持:

    $default_templates = array(
        \'stacked\'       => \'stacked.php\',
        \'one_half\'      => \'one_half.php\',
        \'one_half_last\' => \'one_half_last.php\',
    );
    $theme_templates = (array) get_theme_support( \'inferno_shortcodes\' );
    
    $templates = array();
    
    foreach ( $default_templates as $shortcode => $file )
    {
        if ( isset ( $theme_templates[ $shortcode ] ) )
            $templates[ $shortcode ] = locate_template( $theme_templates[ $shortcode ] );
        else 
            $templates[ $shortcode ] = plugin_dir_path( __FILE__ ) . "templates/$file";
    }
    
    现在,任何主题都可以为所有或某些短代码提供模板…

    add_theme_support(
        \'inferno_shortcodes\',
        array (
            \'stacked\'       => \'inferno-shortcodes/stacked.php\',
            \'one_half\'      => \'inferno-shortcodes/one_half.php\',
            \'one_half_last\' => \'inferno-shortcodes/one_half_last.php\',
        )
    );
    
    …在插件中,您只需包含用于呈现输出的模板。

    SO网友:Elisha Terada

    我也开发和利用了短代码,我发现传递选项作为属性效果很好。例如,您的短代码可以接受额外的参数,例如:

    [最近发布的帖子thumb=“true”date=“false”]

    然后在短代码中,只需要编写条件来检查属性。

    官方文档描述了如何作为选项检索属性,甚至为最常见的设置设置默认值。

    http://codex.wordpress.org/Shortcode_API

    我还创建了不同的“模式”,以便根据典型用法打开/关闭各种条件集。例如[最近发布模式=“widget”]将关闭许多选项,以使显示非常小。

    结束

    相关推荐

    is_mobile as shortcode

    我安装了插件“mobble”,它提供了更多的条件标记。由于我想为移动设备隐藏一些内容,我尝试构建一个短代码[is\\u mobile]。但我尝试了很多不同的方法return do_shortcode($content); 和return $content;或return apply_filters(\'the_content\', $content);但这根本不是我想做的;(add_shortcode( \'is_mobile\', \'is_mobile_shortcode\' ); &#x