当POST_STATUS=PUBLISH时,向POST编辑页面添加按钮

时间:2012-10-04 作者:dnagirl

问题:在“编辑帖子”管理页面上,可以使用什么挂钩将自定义按钮添加到“发布”元框中

用例

我有一个手动滚动的自定义帖子类型,名为ash_newsletter. 我想在post.php?post={$post->ID}&action=edit 此帖子类型的管理页面。该按钮仅在帖子发布后出现。该按钮只能单击一次。按钮将位于;“发布”;代谢箱。

我的想法是,当单击按钮时,脚本将检查当前的post状态,并检查post\\u meta,ash\\u ready\\u ran==false。如果两个条件都通过,将调用一个联系其他服务的函数。如果函数返回true,“ash\\u ready\\u ran”将更新为true。

3 个回复
SO网友:Adam

这会让你开始;

add_action( \'post_submitbox_misc_actions\', \'custom_button\' );

function custom_button(){
        $html  = \'<div id="major-publishing-actions" style="overflow:hidden">\';
        $html .= \'<div id="publishing-action">\';
        $html .= \'<input type="submit" accesskey="p" tabindex="5" value="Customize Me!" class="button-primary" id="custom" name="publish">\';
        $html .= \'</div>\';
        $html .= \'</div>\';
        echo $html;
}
添加自定义按钮以发布元框-示例;

enter image description here

到目前为止,你仍然需要;

请仅在自定义帖子类型上注册自定义按钮,以便在帖子具有post\\U发布状态时仅显示按钮,编写自定义函数调用自定义服务,但请尝试解决以上问题并发布结果。我明天会回来看看你在哪里,如果我有其他人可以进一步帮助你。

SO网友:jgraup

谢谢userabuser 作为领先者。我相信扩展后的代码将更接近:

add_action( \'post_submitbox_misc_actions\', \'custom_button\', 10, 1 );

function custom_button( $post ) {

    // Show only for published pages.
    if ( ! $post
         || \'publish\' !== $post->post_status
         || \'page\' !== $post->post_type ) {
        return;
    }

    $html = \'<div id="major-publishing-actions" style="overflow:hidden">\';
    $html .= \'<div id="publishing-action">\';
    $html .= \'<input type="submit" accesskey="p" tabindex="5" value="Custom Button" class="button-primary" id="submitbox-custom-button" name="publish">\';

    // Post meta example.
    $user = get_user_by( \'ID\', get_post_meta( $post->ID, \'_edit_last\', true ) );
    if ( $user ) {
        $html .= \'<div>\' . ucfirst( $post->post_type ) . \' \' . $post->ID . \' last edited by \' . $user->display_name . \'</div>\';
    }

    $html .= \'</div>\';
    $html .= \'</div>\';

    // Customize button click event.
    $html .= "<script>window.addEventListener(\'load\', function(){ jQuery(\'input#submitbox-custom-button\').click(function(event){  event.preventDefault(); alert(\'You\\\'re editing " . $post->post_type . " " . $post->ID . "\'); return true; }); }); </script>";

    echo $html;
}
有几种方法可以实现服务层,因此今天没有必要解决这个5年多的老问题。但这对未来的任何人来说都应该是一个很好的复制/粘贴开始,而且会开箱即用。

显然,最好将JS包含在单独加载的文件中,但如果您想在可读性更强的JS中进行黑客攻击,可以使用ob_startob_get_clean.

ob_start(); ?>
<script>window.addEventListener(\'load\', function() {
    jQuery(\'input#submitbox-custom-button\').click(function(event) {
      event.preventDefault();
      alert(\'You\\\'re editing <?php echo $post->post_type . " " . $post->ID; ?>\');
      return true;
    });
  });
</script>
<?php $html .= ob_get_clean();

SO网友:Dominik Späte

使用post_submitbox_misc_actions 钩子是一种合适的方法,但您不应该像前面的答案中建议的那样两次使用DOM ID。因此,HTML输出应如下所示:

add_action( \'post_submitbox_misc_actions\', function( $post ){
    // check something using the $post object
    if ( get_post_status( $post->ID ) === \'publish\' ){
        echo \'<div class="misc-pub-section">Some button...</div>\';
    }
});
请参见:https://developer.wordpress.org/reference/functions/post_submit_meta_box/

结束

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register