如果满足条件,则运行添加操作挂接

时间:2020-09-10 作者:Sam

能跑吗add_action 在一定条件下?

例如,假设我想回应;“你好”;在首页的页眉中,然后使用相同的功能,但“echo”;“你好”;在存档页的页脚中。

function say_hello() {
    echo \'<p>Hello!</p>\';
}

// Echo in wp_head on the front page
if ( is_front_page() ) {
    add_action(\'wp_head\', \'say_hello\');
}

// Echo in wp_footer on the archive
if ( is_archive() ) {
    add_action(\'wp_footer\', \'say_hello\');
}
以上都不行,有什么想法吗?

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

我猜这段代码是直接从插件的函数运行的。php,表示您正在评估is_front_page()is_archive() 加载插件时。这还为时过早,因为还没有初始化足够的状态来知道你在哪个页面上。

要解决此问题,您需要:

将逻辑移到say\\u hello函数中,并在呈现页眉或页脚时检查is\\u首页或is\\u存档:

function say_hello_in_header() {
    // Echo in wp_head on the front page
    if ( is_front_page() ) {
        echo \'<p>Hello!</p>\';
    }
}
add_action( \'wp_head\', \'say_hello_in_header\' );

function say_hello_in_footer() {
    // Echo in wp_footer on the archive
    if ( is_archive() ) {
        echo \'<p>Hello!</p>\';
    }
}
add_action( \'wp_footer\', \'say_hello_in_footer\' );
  1. 或在设置完所有状态后但呈现页眉和页脚之前选择要挂接的操作,例如wp\\u enqueue\\u脚本,并在此处执行测试和页眉和页脚操作:
    1. function enqueue_say_hellos() {
          // Echo in wp_head on the front page
          if ( is_front_page() ) {
              add_action( \'wp_head\', \'say_hello\' );
          }
      
          // Echo in wp_footer on the archive
          if ( is_archive() ) {
              add_action( \'wp_footer\', \'say_hello\' );
          }
      }
      add_action( \'wp_enqueue_scripts\', \'enqueue_say_hellos\' );
      

      综上所述,请注意wp\\u head不是向页面添加HTML的正确位置,因为它是从页面的<;压头(>);标记,而不是;车身(>);标签如果你在那里添加任何内容,都会出现在错误的地方。如果要修改页面上的标题,则必须编辑模板或找到其他机制。

相关推荐

OOP development and hooks

我目前正在为Wordpress编写我的第一个OOP插件。为了帮助我找到一点结构,a boiler plate 这为我奠定了基础。在里面Main.php 有一种方法可以为管理员加载JS和CSS资产:/** * Register all of the hooks related to the admin area functionality * of the plugin. * * @since 0.1.0 * @access private