删除选项以允许从POST页面选项中引用回溯/回拨

时间:2018-07-28 作者:Brett

我正在尝试禁用WordPress中与pingbacks/trackbacks相关的所有功能,到目前为止,我有以下功能:

add_action( \'pre_ping\', \'disable_pingback\' );

function disable_pingback( &$links ) {
    foreach ( $links as $l => $link ) {
        if ( 0 === strpos( $link, get_option( \'home\' ) ) ) {
            unset( $links[ $l ] );
        }
    }
}
然而,当我打开页面选项并启用讨论时,我仍然看到:

enter image description here

我找到了这个answer (方法2),但它已经使用了5年多了,我不确定完全替换整个部分是否是解决兼容性问题的最佳方法,所以我再次询问。。。

有没有更干净的方法来实现这一点?

5 个回复
SO网友:Rick Hellewell

你的代码是正确的,好吧。它将禁用回溯/ping功能。正如您所注意到的,它不会从屏幕上删除该选项。

不过,我不知道该如何测试。但是您的代码应该能够禁用允许trackback/ping的实际过程。

此站点可能会测试trackback/pingshttps://tech.wizbangblog.com/ping.php . 没有这方面的经验,所以YMMV。

SO网友:Mark Kaplun

您所指的答案中描述的方法是使用PHP更容易理解的方法。我同意,从代码稳定性的角度来看,这很糟糕,因为您需要确保元框中没有任何其他更改。

在php中执行此操作的另一种方法是删除核心元盒,并创建自己的元盒,在其中调用原始元盒并过滤出相关输出。它仍然很难看,你必须为它写一篇长评论,解释它的原因,但它比第一种方式更可能保持稳定。

使用JS或CSS隐藏该复选框可能是一个更稳定的想法。您仍然在打赌不会更改ID,但这种情况发生的可能性可能要小得多,并且生成的代码更容易理解。

SO网友:SHA3.org

无论我使用了什么参数或设置了什么优先级,WordPress Codex解决方案都不适用于我,可能是因为我的设置非常复杂,或者正如其他人所评论的那样。第一段代码可能对您有用,但我目前没有一个默认的测试环境。第二段代码肯定对我有用。最后一段代码也从帖子的快速编辑中删除了该选项。

您仍需要像之前那样禁用该功能。

Wordpress Codex解决方案,(挂接到add\\u meta\\u框中,以便最后触发,但您可以使用admin\\u菜单或do\\u meta\\u框)文档Here

function remove_trackbacks_pingbacks() {

            remove_meta_box(\'trackbacksdiv\', \'post\', \'normal\');

}
add_action(\'add_meta_boxes\', \'remove_trackbacks_pingbacks\');
这可能有点过头了,但这才是真正对我有用的。请注意,它将删除框中的选项,使其不显示任何地方,包括页面。它还允许您自定义HTML,以防您想添加注释,告诉用户pingback和trackback已被禁用(这可能适合您的需要,也可能不适合您的需要,但无论如何,它就在这里)文档Here

    function remove_trackbacks_pingbacks ($post_type, $post) {

    global $wp_meta_boxes, $current_screen;

    # Remove "ping_status" from `commentstatusdiv`:
    $wp_meta_boxes[$current_screen->id][\'normal\'][\'core\'][\'commentstatusdiv\'][\'callback\'] = function($post) {

        ?>
            <input name="advanced_view" type="hidden" value="1">
            <p class="meta-options">
                <label for="comment_status" class="selectit">
                    <input id="comment_status" name="comment_status" type="checkbox" value="open" <?php checked($post->comment_status, \'open\'); ?>> Allow comments?
                </label>
                <?php do_action(\'post_comment_status_meta_box-options\', $post); ?>
            </p>
        <?php

    };

}

add_action(\'add_meta_boxes\', \'remove_trackbacks_pingbacks\', 10, 2);
最后,由于您希望从编辑屏幕中删除该选项,因此我假设您可能也希望从快速编辑屏幕中删除该选项。据我所知,没有可以钩住的钩子或类,因此纯jQuery解决方案是合适的。插入函数。php

从此解决方案中修改Here

    add_action( \'admin_head-edit.php\', \'remove_pings_quickedit\' );

function remove_pings_quickedit() 
{    

    global $current_screen;
     if( \'edit-post\' != $current_screen->id )
        return;
    ?>
    <script type="text/javascript">         
        jQuery(document).ready( function($) {           
            $(\'span:contains("Allow Pings")\').each(function (i) {
                $(this).remove();
            });
            $(\'input[name=ping_status]\').each(function (i) {
                $(this).remove();
            });
                   });    
    </script>
    <?php
}

SO网友:Ciprian

以下是WordPress推荐的方法:

function remove_post_custom_fields() {
    // Remove Discussion meta box
    remove_meta_box(\'commentstatusdiv\', \'post\', \'normal\');

    // Remove Comments meta box
    remove_meta_box(\'commentsdiv\', \'post\', \'normal\');
}
add_action(\'admin_menu\', \'remove_post_custom_fields\');
更换post 具有page 如果需要,也可以使用其他自定义帖子类型。

相关法典链接:
https://codex.wordpress.org/Function_Reference/remove_meta_box

享受

SO网友:Trilok

请在主题上输入以下代码functions.php 文件我希望它对你有用

function hide_ping_track() {    
    echo "<style>.meta-options label[for=ping_status], #ping_status{display:none !important;}</style>";      
}
add_action(\'admin_head-post.php\', \'hide_ping_track\');

结束

相关推荐

我想创建子主题,但已经编辑了父主题的css文件和一些php文件

我下载了一个WP主题并编辑了一些php 文件和css 我喜欢的文件(尝试和错误),并一直在我的网站上使用,但没有创建子主题。这意味着我对父主题所做的任何更新都将覆盖我所做的更改,因此到目前为止我还没有做任何更新。现在是否可以创建子主题,以某种方式保留新编辑的php 文件和css 通过将它们放在我的子主题文件夹中(创建某种指针css 文件以使子级覆盖父级),然后更新原始父级?如果是,如何?或者我应该完全放弃主题,寻找一个新的主题,并在编辑之前立即创建一个子主题吗?