替换页面列表中标题前的破折号

时间:2016-12-06 作者:uruk

我想替换仪表板页面列表中页面标题前的破折号。对于第一个层次结构下面的每个层次结构,前面都有一个破折号(如下面的屏幕截图所示):

enter image description here

看来过滤器the_title 不影响这些破折号:

add_filter( \'the_title\', \'change_my_title\' );
function change_my_title( $title ) {
    return str_replace( \'–\', $title );
    // nor preg_replace or – or — work
}
So my question is: 如何用特定的内容替换这些破折号?我真的必须实现一个定制的列表表还是要干预jQuery?

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

无法使用任何筛选器更改破折号,因为没有可用于更改破折号的筛选器。

但您仍然可以使用jQuery将此代码放在函数中进行更改。php

add_action(\'admin_head\',function(){


global $pagenow;

// check current page.
if( $pagenow == \'edit.php\' ){ ?>

    <script>

        jQuery(function($){

            var post_title = $(\'.wp-list-table\').find(\'a.row-title\');
            $.each(post_title,function(index,em){
                var text = $(em).html();
                // Replace all dashes to * 
                $(em).html(text.replace(/—/g ,\'*\'));
            });
        });

    </script>
    <?php
    }
});
请参见https://github.com/WordPress/WordPress/blob/master/wp-admin/includes/class-wp-posts-list-table.php#L918-L919

SO网友:fuxia

这是hard-coded 如果不更改整个列表表类,则无法更改:

    $pad = str_repeat( \'&#8212; \', $this->current_level );
    echo "<strong>";

    $format = get_post_format( $post->ID );
    if ( $format ) {
        $label = get_post_format_string( $format );

        $format_class = \'post-state-format post-format-icon post-format-\' . $format;

        $format_args = array(
            \'post_format\' => $format,
            \'post_type\' => $post->post_type
        );

        echo $this->get_edit_link( $format_args, $label . \':\', $format_class );
    }

    $can_edit_post = current_user_can( \'edit_post\', $post->ID );
    $title = _draft_or_post_title();

    if ( $can_edit_post && $post->post_status != \'trash\' ) {
        printf(
            \'<a class="row-title" href="%s" aria-label="%s">%s%s</a>\',
            get_edit_post_link( $post->ID ),
            /* translators: %s: post title */
            esc_attr( sprintf( __( \'&#8220;%s&#8221; (Edit)\' ), $title ) ),
            $pad,
            $title
        );
    } else {
        echo $pad . $title;
    }
即使更改该表也非常困难,因为类实例set to a global variable 使用函数_get_list_table(), 它甚至没有提供过滤器。

欢迎来到程序代码的奇妙世界。

我想你必须使用JavaScript来实现这一点。

SO网友:cjbj

正如@Toscho所说,标题列是硬编码的,因此您无法更改它。但是,您可以删除该列并将其重新定义为自定义列:

add_filter( \'manage_pages_columns\', \'wpse248405_columns\', 25, 1 );
function wpse248405_columns ($cols) {
   // remove title column
   unset( $cols[\'title\'] );
   // add custom column in second place
   $cols = array(\'cb\' => $cols[\'cb\']) + array(\'title\' => __( \'Title\', \'textdomain\' )) + $cols;
   // return columns
   return $cols;
   }
现在必须使自定义列正常工作like the original:

add_action( \'manage_pages_custom_column\', \'wpse248405_custom_column\', 10, 2 );
function wpse248405_custom_column( $col, $post_id ) {
    if ($col == \'title\') {
        $post               = get_post( $post_id );
        $title              = _draft_or_post_title();
        $can_edit_post      = current_user_can( \'edit_post\', $post->ID );
        // set up row actions
        $actions = array();
        if ( $can_edit_post && \'trash\' != $post->post_status ) {
            $actions[\'title\'] = \'<strong><a href="\' . get_edit_post_link( $post->ID, true ) . \'" aria-label="\' . $title . esc_attr( __( \'Edit this item\' ) ) . \'">\' . $title . \'</a></strong>\';
            // invoke row actions
            $table = new WP_Posts_List_Table;
            echo $table->row_actions( $actions, true );
            }
        }
     }
请注意,如果您在自己的函数中模仿核心行为,则很容易受到未来核心版本的攻击。

SO网友:webpager

破折号是因为它们列在父页下。在页面编辑屏幕的右下方,您可以根据需要删除父项。

相关推荐

如何使用两个不同文件向jQuery AJAX调用发送php变量

我需要从一个php文件(page.php)向另一个jquery文件(sender.js)中的Ajax调用发送一个私人电子邮件地址。此电子邮件地址必须对用户/或网站不可见,直到用户从wp\\U mail获得自动响应,它必须允许用户答复组织。此电子邮件地址因客户想要联系的组织而异(数百个)。我必须在表单之前从组织获取电子邮件地址,因为它是由javascript生成的。(generated\\u mail.js)发件人。js在页面的标题中被很好地调用。php我在(page.php)中尝试了这段代码——一个组织在