Estoy creando un portal de clientes donde mis clientes pueden mantener sus proyectos y dejar comentarios en Wordpress. Tengo dos tipos de publicaciones personalizadas llamadas "Clientes" y "Proyectos" y cada uno extrae información entre sí en el back-end. Cuando creo un cliente, genera automáticamente su postID en un menú desplegable en el tipo de publicación de proyectos donde puedo asignar un cliente a un proyecto.
Lo que estoy tratando de lograr es mostrar todos los proyectos asociados con el cliente seleccionado en una sola página en el front-end. La página única será el portal del cliente, que se genera por el tipo de publicación del cliente.
Parece que no puedo mostrar la publicación asociada. Aquí está mi código para el single.php
cual se mostrarán los proyectos en el portal del cliente.
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$loop = new WP_Query( array(
'post_type' => array( 'projects'),
'posts_per_page' => -1,
'paged' => $paged,
'meta_query' => array(
array(
'key' => 'a_client', // name of custom field
'value' => '"' . get_the_ID() . '"',
'compare' => 'LIKE'
)
)
));
?>
A continuación se muestra el código que estoy usando para asignar un cliente a proyectos en el panel de administración de proyectos. Este script muestra cualquier cliente que creé en la página del cliente y muestra sus nombres en un menú desplegable.
add_action( 'add_meta_boxes', 'add_clients_custom_metabox' );
function add_clients_custom_metabox() {
add_meta_box( 'custom-metabox', __( 'Clients' ), 'clients_custom_metabox', 'projects', 'side', 'high' );
}
function clients_custom_metabox($post) {
global $post,$current_user;
//remember the current $post object
$real_post = $post;
//get curent user info (we need the ID)
get_currentuserinfo();
//create nonce
echo '<input type="hidden" name="clients_meta_box_nonce" value="', wp_create_nonce(basename(__FILE__)), '" />';
//get saved meta
$selected = get_post_meta( $post->ID, 'a_clients', true );
//create a query for all of the user clients posts
$clients_query = new WP_Query();
$clients_query->query(array(
'post_type' => 'client_portal',
'posts_per_page' => -1,
'author' => $current_user->ID));
if ($clients_query->have_posts()){
echo '<select name="a_clients" id="a_clients">';
//loop over all post and add them to the select dropdown
echo '<option>Assign a client</option>';
while ($clients_query->have_posts()){
$clients_query->the_post();
echo '<option value="'.$post->ID.'" ';
if ( $post->ID == $selected){
echo 'selected="selected"';
}
echo '>'.$post->post_title .'</option>';
}
echo '<select>';
}
//reset the query and the $post to its real value
wp_reset_query();
$post = $real_post;
}
//hook to save the post meta
add_action( 'save_post', 'save_clients_custom_metabox' );
// Process the custom metabox fields
function save_clients_custom_metabox( $post_id ) {
global $post;
// verify nonce
if (!wp_verify_nonce($_POST['clients_meta_box_nonce'], basename(__FILE__))) {
return $post_id;
}
// check autosave
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return $post_id;
}
// check permissions
if ('events' == $_POST['post_type']) {
if (!current_user_can('edit_page', $post_id)) {
return $post_id;
}
} elseif (!current_user_can('edit_post', $post_id)) {
return $post_id;
}
if( $_POST ) {
$old = get_post_meta($post_id, 'a_clients', true);
$new = $_POST['a_clients'];
if ($new && $new != $old){
update_post_meta($post_id, 'a_clients', $new);
}
}
}
Código completo para single.php http://pastebin.com/na7djwsq
Registrar tipo de publicación que estoy usando El tipo de publicación del proyecto se llama => proyectos El tipo de publicación de clientes se llama => client_portal
fuente
paged
establece en$client_ID
? también está configurandoposts_per_page
para devolver todas las publicaciones.client
debería sera_client
y @ bigant841 está guardando el meta como una matriz, por lo que se ve así:[a_clients] => Array ([0] => 91)
projects
? Noproject
?Respuestas:
Estás configurando la meta meta como
a_clients
, pero la consulta está buscandoa_client
.update_post_meta($post_id, 'a_clients', $new);
'key' => 'a_client'
Esos deben ser lo mismo. Dado que actualizar la consulta significa que no tendrá que actualizar las publicaciones nuevamente, le sugiero actualizar
key
la meta_query aa_clients
.fuente