添加到post.php中的‘action’以允许在编辑插件中的自定义帖子类型时执行更多操作

时间:2020-06-15 作者:nat

当在插件中使用自定义帖子类型时,我想创建一种方式,在编辑时,我可以将url中“action=”的使用更改为其他内容,打开一个新的url,该url将集中在编辑我的帖子的不同领域。这将允许用户在更清晰的视图中关注他们正在编辑的帖子的某些区域,而不需要在一个页面上显示所有内容。但仍允许我在保存时点击帖子。在过去,我总是使用Div覆盖所有具有更高索引的内容来隐藏其他内容,但遇到这个问题后,我认为这可能看起来更整洁。

我想实现的是在URL中为“action=”创建更多选项。我在Elementor page builder之类的插件中看到了这一点。作为标准,它写在了帖子上。php文件具有编辑、编辑附件、编辑帖子、垃圾、预览等选项。他们在elementor中建立了它,添加了elementor、elementor library等。

/* Link to look like */
www.example.co.uk/wp-admin/post.php?post=15&action=newaction
我的想法是,不知何故,我需要添加到现有的列表中。然后告诉它访问URL时要显示什么。在一次测试中,我临时在post中创建了一个新的案例,以了解这将如何发挥作用。php使用“newaction”,代码与“edit”案例相同。我希望它在访问上面的URL时显示编辑器,但是它会将您重定向到

www.example.co.uk/wp-admin/edit.php

我不确定是否需要添加其他内容,如:

if($_POST[\'action\' == \'example1\']){
prevent default redirect and load scripts/stylesheets etc for page
} 
或者如果你必须告诉Wordpress以某种方式允许。

以前有没有人遇到过这个问题,或者碰巧能为我指出正确的方向。我已经浏览了Elementors插件文件,看看是否可以从中找到答案。但是,作为一个如此大的插件,它似乎到处都是,令人讨厌的是,我想有人可能会更快地了解这里。

1 个回复
SO网友:Jacob Anderson

使用创建自定义操作add_filter(post_action_{$action});

即使只是为了测试,编辑核心文件也是不好的做法。我更喜欢将源代码下载到我自己的机器上,并找到钩子的触发位置和方式<无论如何,这部分源代码中的文档很差,但我已经研究了一段时间了,看起来post.php 文件<第一个是replace_editorswitch 接近结尾的语句post.phpcase 属于action=edit. 这使得经典的WordPress编辑器可以被其他东西代替,比如现在附带的Gutenberg编辑器<我使用的第二个钩子是post_action_{$action}. 这是在default: 的情况switch 声明,意思是如果action=anything_other_than_given_cases 在URL中,这将触发

switch 然而,声明,wp_redirect( admin_url( \'edit.php\' ) ); 调用,在执行连接到post_action_{$action} 将您重定向到edit.php.

这与Elementor的做法类似,Elementor有自己的习惯action 在的URL中使用post.php, 与查询字符串、GET和AJAX有很大关系,因此如果您对它们不是很熟悉,那么这就是一个开始。很抱歉我说得太多了,但这里有一个post_action_{$action}.

<?php
  add_action( \'post_action_your_action_name\', \'connected_function\' );
  function connected_function($post_id) {
    //Add your functionality here.
    //This will execute when /post.php?post=$post_id&action=your_action_name
  }
  //After execution we return to default: case in post.php
  //Where the wp_redirect() will be called.
如果需要添加链接以访问此页面,post_row_actions 钩子在中的立柱下添加链接edit.php 文件,如;编辑(""E;“垃圾”"E;“查看”;,等等,如下所示:

<?php
  add_filter( \'post_row_actions\', \'add_links\' );
  function add_links($actions, $post) {
    $url = add_query_arg(
      [
        \'post\' => $post->ID,
        \'action\' => \'your_action_name\',
      ],
      admin_url( \'post.php\' )
    );
    $actions[\'your_action_name\'] = sprintf(
      \'<a href="%1$s">%2$s</a>\',
      $url,
      \'Actual Link Text\'
    );
    return $actions;
  }
这会在您的帖子下方创建一个链接,您可以单击该链接将您重定向到要添加到的自定义操作post.php, i、 e。/post.php?post=$post_id&action=your_action_name. 此外,别忘了检查当前帖子是否属于要添加此功能的类型。希望这有帮助。