修改作者链接以在URL中添加作者元

时间:2019-03-13 作者:Asmita Subedi

我有一个插件,它添加了一个名为trip\\u vendor的自定义角色。我正在尝试编辑或修改此角色的配置文件url。目前是example.com/operator/username 但我想把它改成example.com/operator/company-name.

company-name 是用户(其角色是trip\\u vendor)的元值。总之,我希望在作者配置文件url中有元值,而不是在作者名称中。我可以将slug author(默认)更改为operator,但无法添加author meta。

function wpte_add_permastruct(){
       add_permastruct( \'%author_trip_vendor%\', \'operator/%author%\', [
           \'ep_mask\' => EP_AUTHORS,
       ]);
   }


   function wpte_vendor_profile_url( $link, $author_id, $author_nicename ){
       if ( user_can( $author_id, \'trip_vendor\' ) ) {
           $link = \'/operator/\' . $author_nicename;
           $link = home_url( user_trailingslashit( $link ) );
       }
       return $link;
   }

1 个回复
SO网友:rozklad

我不知道上下文,但我让您的用例这样工作:

添加新的permastruct并确保重新生成permalinks(设置>permalinks>保存)

/**
 * Add additional permalink
 *
 * @uses https://codex.wordpress.org/Plugin_API/Action_Reference/init
 */
function wpte_add_permastruct(){

    add_permastruct( \'%author_trip_vendor%\', \'operator/%author%\', [
        \'ep_mask\' => EP_AUTHORS,
    ]);
}

add_action( \'init\', \'wpte_add_permastruct\' );
已将此添加到init 行动

下一步在author查询上更改WP查询(is\\u author()==true条件)

/**
 * Change query when is_author() is true
 *
 * @uses https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
 */
function wpse33150_alter_query($query) {

    // Do not apply if not $querying "author"
    if ( ! is_author() )
        return;

    // Set query for author meta
    $query->set( \'_private_author_query\', [
        [
            \'key\' => \'company_name\',
            \'value\' => get_query_var(\'author_name\'),
            \'compare\' => \'=\',
        ]
    ]);

    return $query;
}

add_action( \'pre_get_posts\', \'wpse33150_alter_query\' );
这已添加到pre_gest_posts 行动

现在,当您输入端点/操作员/公司名称时,查询将更改为按“公司名称”查询。

仅供参考,我还添加了author元字段的实现。

/**
 * Add meta field company_name to user
 */
function wpse33150_user_profile_fields( $user ) { ?>
    <table class="form-table">
        <tr>
            <th>
                <label for="company_name"><?php _e(\'Company name\'); ?></label>
            </th>
            <td>
                <input type="text" name="company_name" id="company_name" value="<?php echo esc_attr( get_the_author_meta( \'company_name\', $user->ID ) ); ?>" class="regular-text" />
            </td>
        </tr>
    </table>
<?php }

add_action( \'show_user_profile\', \'wpse33150_user_profile_fields\' );
add_action( \'edit_user_profile\', \'wpse33150_user_profile_fields\' );

/**
 * Update meta field company_name to user on update
 */
function save_wpse33150_user_profile_fields( $user_id ) {
    if ( !current_user_can( \'edit_user\', $user_id ) ) { 
        return false; 
    }

    update_user_meta( $user_id, \'company_name\', $_POST[\'company_name\'] );
}

add_action( \'personal_options_update\', \'save_wpse33150_user_profile_fields\' );
add_action( \'edit_user_profile_update\', \'save_wpse33150_user_profile_fields\' );

相关推荐

Force pretty permalinks?

我正在构建一个插件,该插件将用于单个站点,并依赖于add_rewrite_rule 要工作,需要打开永久链接。打开它们并不困难,因为它只是一个站点,但我担心其中一个管理员可能会在不知道自己在做什么的情况下关闭它,并破坏该站点。如何以编程方式强制保持漂亮的永久链接?