add_action in the loop hooks

时间:2015-02-10 作者:wpmika

我有以下结构:

add_action(\'my_content\', \'standard_loop\');
function standard_loop() {
if (have_posts()) :
   while (have_posts()) :
      the_post();
         do_action(\'loop_entry_before\');
         do_action(\'loop_entry\');
         do_action(\'loop_entry_after\');
   endwhile;
endif;
}
add_action(\'loop_entry_before\', \'do_entry\', 1);
function do_entry() {
   if ( get_the_title() ) {
      add_action(\'loop_entry_before\', \'function_that_adds_h2_structure\');
   }
   add_action(\'loop_entry_entry\', \'function_that_adds_content_structure\');
}
问题是,所有帖子都会显示一个函数,\\u,该函数添加了\\u h2\\u结构,即使它只是空html,并且帖子没有标题。这只是在do\\u entry()中使用login的一个示例;

谢谢

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

一旦一个函数挂接到一个动作上,每次调用该动作时都会执行该函数(使用do_action). 要停止此操作,应删除该操作。看见remove_action:

function do_entry() {
   if ( get_the_title() ) {
      add_action(\'loop_entry_before\', \'function_that_adds_h2_structure\');
   } else {
      remove_action(\'loop_entry_before\', \'function_that_adds_h2_structure\');
   }
   add_action(\'loop_entry_entry\', \'function_that_adds_content_structure\');
}
在您的情况下,我认为actions挂钩方法不是很好,最好是直接调用函数:

function do_entry() {
   if ( get_the_title() ) {
      function_that_adds_h2_structure();
   }
   add_action(\'loop_entry_entry\', \'function_that_adds_content_structure\');
}

结束

相关推荐

CPT while loop not working

我无法从while循环中获得任何东西:<ul> <?php $query_args = array( \'post_type\' => \'Smart panels\', \'posts_per_page\' => 5, \'orderby\' => \'meta_value_num\', \'meta_key\' => \'post_v