如何将特定的Widget添加到仅1个页面?

时间:2012-12-22 作者:itsme

我想只在我的网站的一个页面上显示一个小部件,因为我可以看到这是不可能的,对吗?

我是否应该为我的所有网站页面添加这些内容?

4 个回复
最合适的回答,由SO网友:fuxia 整理而成

这取决于您想在何处显示小部件。

让我们从小部件区域(侧栏)注册开始:

add_action( \'wp_loaded\', \'wpse_76959_register_widget_area\' );
function wpse_76959_register_widget_area()
{
    register_sidebar(
        array (
            \'name\'          => __(
                \'Widgets on page Sample Page\',
                \'theme_textdomain\'
                ),
            \'description\'   => __(
                \'Will be used on a page with a slug "sample-page" only.\',
                \'theme_textdomain\'
                ),
            \'id\'            => \'sample-only\',
            \'before_widget\' => \'<div id="sample-only-widget">\',
            \'after_widget\'  => \'</div>\',
            \'before_title\'  => \'<h2>\',
            \'after_title\'   => \'</h2>\',
        )
    );
}
这很简单。我们用一些自定义标记注册一个新的小部件区域。

enter image description here

现在我们必须在某处展示它。我们可以在page.php 模板:

do_action( \'show_sample_widget\' );
或者我们可以使用现有的操作,这将限制小部件可用的位置。例如,操作loop_start 我们第一次打电话的时候the_post() 在循环中。如果我们想将小部件设置在页面内容的顶部,我们可以使用该挂钩:

add_action( \'loop_start\', \'wpse_76959_render_widget\' );

function wpse_76959_render_widget()
{
    is_page( \'sample-page\' ) && dynamic_sidebar( \'sample-only\' );
    remove_action( current_filter(), __FUNCTION__ );
}
对于我们将使用的自定义操作:

add_action( \'show_sample_widget\', \'wpse_76959_render_widget\' );

SO网友:marcochiesi

有几个插件允许根据特定条件显示小部件:

以下插件提供了一种替代解决方案,它允许您直接从编辑页面屏幕在每页的基础上定义一组自定义小部件:

SO网友:Vigs

如果您愿意编辑主题的模板文件:

查找位置

dynamic_sidebar(\'side_bar_name\');
在调用之前或之后,或在您网站上的任何位置使用prettymuch:

$pageTitle =  get_the_title($post->ID); 
$targetPage = \'the title of the page you want to target goes here\';

    if($pageTitle == $targetTitle){    
     the_widget( \'the_widget_unique_id_aka_name\', $instance, $args);
    }
   //the_widget() calls a specific widget and displays it
如果您想更清楚地了解它:在函数中创建函数。php,看起来像:

function call_my_widget( $post ){
    $pageTitle =  get_the_title($post-ID); 
    $targetPage = \'the title of the page you want to target goes here\';

        if($pageTitle == $targetTitle){    
         the_widget( \'the_widget_unique_id_aka_name\', $instance, $args);
        }
}
使用以下命令调用函数:

call_my_widget( $post );
这必须在循环中调用,或者$post 全局变量存在。

然后在模板文件中调用该函数(可能是page.php?)仅在目标页面上显示目标小部件。

SO网友:Jeffrey Carandang

您可以使用widget_display_callback : https://developer.wordpress.org/reference/hooks/widget_display_callback/ 只需在下面的代码中更改页面id。

function custom_display_callback( $instance, $widget, $args ){
    if( is_page( 10 ) ){
        return false;
    }
    return $instance;
}
add_filter( \'widget_display_callback\', \'custom_display_callback\', 50, 3 );
我希望这有帮助。干杯

结束

相关推荐

Getting 404s on New Pages

无法找出发生这种情况的原因-wp安装问题或。htaccess问题?我正在使用一个主题,但默认的wp主题也会出现同样的问题。创建一个新页面(例如:about)后,当我尝试从导航访问它或只输入URL:domain时,会得到404。com/dev/about,我也得到了404。安装在httpdocs/dev中的WP。所有插件都已停用。其他一切似乎都正常工作。