将自定义节实现到WordPress主题中的最佳实践方法

时间:2013-05-19 作者:David

我很难找到在WordPress主题中实现自定义部分的最佳方法。例如,我正在制作一个主题,在主页上有四个特色部分。这些部分将位于自己的区域,与页面内容分开。

我知道这可以通过添加四个小部件位置来实现,或者一个小部件位置并让用户添加四个小部件来实现。您还可以将这四个区域添加到主题选项面板中,甚至可以尝试使用页面生成器插件。我想知道是否有人对哪种方法最好以及为什么最好有什么建议?或者对其他方法有什么建议?

谢谢

大卫

1 个回复
SO网友:fuxia

WordPress中的基本范例是回调处理程序。操作、过滤器、小部件、元盒等等……所有操作都是通过为某些触发器注册特定的回调处理程序来运行的。这并不总是最优雅的方式,但这是每个初学者都必须学习的方式,所以无论何时你不确定该做什么,都要坚持这种模式。

因此,请提供四个操作:

do_action( \'home_primary_custom\' );
do_action( \'home_secondary_custom_1\' );
do_action( \'home_secondary_custom_2\' );
do_action( \'home_secondary_custom_3\' );
然后,您或第三方开发人员可以使用注册这些操作的回调add_action().

这是可以改进的:使用前缀以防止与插件或WordPress核心更改发生冲突,并运行一个数组以保持代码紧凑且可读。

$prefix = get_stylesheet();

$custom_actions = array (
    \'home_primary_custom\',
    \'home_secondary_custom_1\',
    \'home_secondary_custom_2\',
    \'home_secondary_custom_3\'
);

foreach ( $custom_actions as $custom_action )
    do_action( "$prefix_$custom_action" );
现在,对于普通模板来说,这可能已经太长了,因此您可以将代码封装在自定义函数中,并将其注册到另一个自定义操作:

// front-page.php
do_action( get_stylesheet() . \'_custom_front_actions\' );

// functions.php

add_action( get_stylesheet() . \'_custom_front_actions\', \'custom_front_actions\' );

/**
 * Execute custom front actions and print a container if there are any callbacks registered.
 *
 * @wp-hook get_stylesheet() . \'_custom_front_actions\'
 * @return bool
 */
function custom_front_actions()
{
    $has_callbacks  = FALSE;
    $prefix         = get_stylesheet();

    $custom_actions = array (
        \'home_primary_custom\',
        \'home_secondary_custom_1\',
        \'home_secondary_custom_2\',
        \'home_secondary_custom_3\'
    );

    // Are there any registered callbacks?
    foreach ( $custom_actions as $custom_action )
    {
        if ( has_action( "$prefix_$custom_action" ) )
        {
            $has_callbacks = TRUE;
            break;
        }
    }

    // No callbacks registered.
    if ( ! $has_callbacks )
        return FALSE;

    print \'<div class="\' . esc_attr( "$prefix-custom-front-box" ) . \'">\';

    foreach ( $custom_actions as $custom_action )
        do_action( "$prefix_$custom_action" );

    print \'</div>\';

    return TRUE;
}
现在,仅当注册了任何回调时,才可以打印自定义容器。第三方开发人员可以注册自己的回调或删除您的回调。你的front-page.php 只需要一行额外的代码。

结束

相关推荐

将/CATEGORY/CARS重写为/Themes/Cars

我知道有很多关于这方面的问题和帖子,但是我找不到一个解决方案或我的特定问题的现有线索。如果我列出我的类别并单击“cars”,url如下所示url/category/cars是否可以在函数中使用某些函数。php更改单词category 进入,进入。topicsurl/topics/cars 有什么想法吗?提前感谢您!