I can't get any hook I try to create to work.
When I used buddypress, I got a hook + shortcode made that worked very well that displayed different text on the message button if the user was logged in or not, or if the marketplace listing had the visitor’s ID as author. Perhaps it’s possible to replace/implement some of the code above to into it to make it function?
My old buddypress private message hook + shortcode on non-plugin page:
//////////////////////////////////////////////////////////////////
// BuddyPress send private message button
//////////////////////////////////////////////////////////////////
/**
* Get a link to send PM to the given User.
*
* @param int $user_id user id.
*
* @return string
*/
function buddydev_get_send_private_message_to_user_url( $user_id ) {
return wp_nonce_url( bp_loggedin_user_domain() . bp_get_messages_slug() . '/compose/?r=' . bp_core_get_username( $user_id ) );
}
/**
* Shortcode [bp-pm-button username=optional_some_user_name]
*
* @param array $atts shortcode attributes.
* @param string $content content.
*
* @return string
*/
function buddydev_private_message_button_shortcode( $atts, $content = '' ) {
// User is not logged in.
if ( ! is_user_logged_in() ) {
return '';
}
$atts = shortcode_atts( array(
'user_id' => '',
'username' => '',
'label' => 'Send Private Message',
), $atts );
$user_id = absint( $atts['user_id'] );
$user_login = $atts['username'];
// if the username is given, override the user id.
if ( $user_login ) {
$user = get_user_by( 'login', $user_login );
if ( ! $user ) {
return '';
}
$user_id = $user->ID;
}
if ( ! $user_id ) {
if ( ! in_the_loop() ) {
return '';
}
$user_id = get_the_author_meta('ID' );
}
// do not show the PM button for the user, if it is aimed at them.
if ( bp_loggedin_user_id() === $user_id ) {
return '';
}
// if we are here, generate the button.
$button = sprintf('<a href="%1$s">%2$s</a>', buddydev_get_send_private_message_to_user_url( $user_id ), $atts['label'] );
return $button . $content;
}
add_shortcode( 'bp-pm-button', 'buddydev_private_message_button_shortcode' );