este método
Tengo una instalación de wordpress en mi tienda magento que utiliza el módulo de terceros fishpig.
Tengo una página llamada list.phtml que publica todo el contenido de una categoría usando $this->getPostListHtml()
Agregué otro div y lo replique, pero ahora solo duplica las publicaciones del primer div al segundo. ¿Cómo hago un segundo div único para que cuando se realicen publicaciones en el backend solo se publique en el segundo div en la misma página? Actualmente obtengo la categoría por slug y la colección de publicaciones y luego establezco el orden (asc) y luego estoy recorriendo la categoría y los ciclistas para cada página que obtiene contenido similar. Tengo varias páginas, pero en cada página de ciclista aún tendrá que tener publicaciones del Equipo 2 debajo del Equipo. Espero que tenga sentido.
cpt/equipo/lista.phtml
<?php
/**
* Team (Rider) - Landing Page
*/
/* @var $this test_Wordpress_Block_Cpt_Type_View */
/* @var $helper test_Wordpress_Helper_Data */
$helper = $this->helper('wordpress');
/* @var $postType Fishpig_Wordpress_Addon_CPT_Model_Type */
$postType = $this->getPostType();
$categorySlug = $this->getCurrentCategorySlug();
$allCategories = $helper->getAllCategories();
$instagramHandles = array(
'skate' => 'testskate',
'surf' => 'testsurf',
'snow' => 'testsnow',
'mx' => 'testmx',
'testunity' => 'testunity',
'girls' => 'testgirls',
);
$textRider = ($categorySlug == 'testunity') ? 'Ambassador' : 'Rider';
$htmlRiderPicks = $this->getChildHtml('picks');
$hasEvents = ($events = $this->getChild('events') && $this->getChild('events')->getTotal());
$_theseRiders = array();
?>
<?php if($categorySlug): ?>
<?php $curCategory = $helper->getCategoryBySlug($categorySlug) ?>
<?php $riders = $curCategory->getPostCollection()->addPostTypeFilter($postType->getPostType())->setOrder('menu_order','asc'); ?>
<div class="team-header row">
<div class="columns">
<h1 class="team-page-title"><?php echo $this->__('Team'); ?></h1>
<ul class="team-categories j-team-category-list">
<?php foreach($helper->getTeamCategories() as $category): /* @var $category Fishpig_Wordpress_Model_Post_Category */ ?>
<li class="j-team-title <?php if($category->getSlug() == $categorySlug): ?>active<?php endif; ?>">
<a href="https://stackoverflow.com/questions/39476229/<?php echo $this->getCategoryUrl($category) ?>"><?php echo $helper->escapeHtml($category->getName()) ?></a>
<?php $riders = $category->getPostCollection()->addPostTypeFilter($postType->getPostType())->setOrder('menu_order','asc'); ?>
<div class="riders-names-list j-riders-names-list only-mobile-show">
<ul>
<?php foreach($riders as $rider): /* @var $rider Fishpig_Wordpress_Model_Post */ ?>
<li>
<a href="<?php echo $rider->getPermalink() ?>"><?php echo $helper->escapeHtml($rider->getPostTitle()) ?></a>
</li>
<?php endforeach; ?>
</ul>
</div>
</li>
<?php
if ($category->getSlug() == $categorySlug) {
$_theseRiders = $riders;
}
?>
<?php endforeach; ?>
</ul>
<div class="riders-names-list mobile-hide">
<ul>
<?php foreach($_theseRiders as $rider): /* @var $rider Fishpig_Wordpress_Model_Post */ ?>
<li>
<a href="<?php echo $rider->getPermalink() ?>"><?php echo $helper->escapeHtml($rider->getPostTitle()) ?></a>
</li>
<?php endforeach; ?>
</ul>
</div>
</div>
</div>
<div id="team-panel" class="team-panel">
<div class="riders-panel" id="Rider">
<div class="riders-list team-riders-list">
<div class="row">
<?php echo $this->getPostListHtml() ?>
</div>
</div>
</div>
</div>
<br><br>
<div class="team-header row">
<div class="columns">
<h1 class="team-page-title"><?php echo $this->__('Second Team'); ?></h1>
<div id="second-team-panel" class="second-team-panel">
<div class="second-riders-panel" id="Second_Rider">
<div class="riders-list team-riders-list-second">
<div class="row">
<?php echo $this->getPostListHtml() ?>
</div>
</div>
</div>
</div>
</div></div>
/**
* Generates and returns the collection of posts
*
* @return Fishpig_Wordpress_Model_Mysql4_Post_Collection
*/
protected function _getPostCollection()
{
return Mage::getResourceModel('wordpress/post_collection');
}
/**
* Returns the HTML for the post collection
*
* @return string
*/
public function getPostListHtml()
{
return $this->getPostListBlock()->toHtml();
}
/**
* Gets the post list block
*
* @return Fishpig_Wordpress_Block_Post_List
*/
public function getPostListBlock()
{
if (is_null($this->_postListBlock)) {
if (($block = $this->getChild($this->_postListBlockName)) === false) {
$block = $this->getLayout()
->createBlock('wordpress/post_list', $this->_postListBlockName . rand(1111, 9999))
->setTemplate($this->getPostListTemplate());
}
$block->setWrapperBlock($this);
$this->_postListBlock = $block;
}
return $this->_postListBlock;
}
cpt/equipo/procesador/lista.phtml
<?php
/**
* Team (Riders) - List View Renderer
*/
/* @var $this Fishpig_Wordpress_Block_Post_List_Renderer */
/* @var $helper test_Wordpress_Helper_Data */
$helper = $this->helper('wordpress');
/* @var $post Fishpig_Wordpress_Model_Post */
$post = $this->getPost();
$featuredImage = $post->getFeaturedImage();
/** @var test_Wordpress_Helper_Image $teamHelper */
$imageHelper = $this->helper('test_wordpress/image');
$background = $imageHelper->getBackground($post);
?>
<div class="m-grid-6 columns">
<div class="rider-list-item fade-item">
<a class="rider-info" href="https://stackoverflow.com/questions/39476229/<?php echo $post->getPermalink() ?>" title="<?php echo $this->escapeHtml($post->getPostTitle()) ?>">
<span class="post-img">
<img class="rider-background fade-image" src="<?php echo $background; ?>" alt="test Riders" />
<?php if ($featuredImage): ?>
<img class="rider-photo " src="<?php echo $featuredImage->getImageByType('thumb-240x220') ?>" alt="<?php echo $this->escapeHtml($post->getPostTitle()) ?>">
<?php endif; ?>
</span>
<span class="rider-list-name"><?php echo $this->escapeHtml($post->getPostTitle()) ?></span>
</a>
</div>
</div>
cpt/equipo/procesador/vista.phtml
<?php
/**
* Team (Riders) - Post View Renderer
*
*/
/* @var $this Fishpig_Wordpress_Block_Post_View */
/* @var $helper test_Wordpress_Helper_Data */
$helper = $this->helper('wordpress');
/* @var $post Fishpig_Wordpress_Model_Post */
$post = $this->getPost();
$nextPost = $post->getNextPost();
$prevPost = $post->getPreviousPost();
/* @var $postType Fishpig_Wordpress_Addon_CPT_Model_Type */
$postType = $helper->getPostTypeByPost($post);
/* @var $parent Fishpig_Wordpress_Model_Post_Category */
$parent = $post->getParentCategory();
/** @var test_Wordpress_Helper_Team $teamHelper */
$teamHelper = $this->helper('test_wordpress/team');
$textRider = ($parent->getSlug() == 'testunity') ? 'Ambassador' : 'Rider';
$layoutType = $post->getCustomField('details_layout');
?>
<div class="row">
<div class="column">
<div class="categories-dropdown riders-dropdown">
<div class="selectBox">
<select onChange="setLocation(this.value);">
<?php foreach($helper->getTeamCategories() as $category): /* @var $category Fishpig_Wordpress_Model_Post_Category */ ?>
<?php $selected = ($category->getId() == $parent->getId()) ? ' selected="true"' : '' ?>
<option value="<?php echo $helper->getCategoryUrl($postType,$category) ?>"<?php echo $selected ?>><?php echo $helper->escapeHtml($category->getName()) ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="selectBox">
<select onChange="setLocation(this.value);">
<option value="<?php echo $helper->getCategoryUrl($postType,$parent) ?>"><?php echo $helper->__('All '.$textRider.'s') ?></option>
<?php $riders = $parent->getPostCollection()->addPostTypeFilter($post->getPostType());?>
<?php foreach($riders as $rider): /* @var $rider Fishpig_Wordpress_Model_Post */ ?>
<?php $selected = ($rider->getId() == $post->getId()) ? ' selected="true"' : '' ?>
<option value="<?php echo $rider->getPermalink() ?>"<?php echo $selected ?>><?php echo $helper->escapeHtml($rider->getPostTitle()) ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
</div>
</div>
<div class="row artists-arrows">
<div class="columns">
<?php if ($prevPost instanceof Fishpig_Wordpress_Model_Post && $prevPost->getId()): ?>
<a href="https://stackoverflow.com/questions/39476229/<?php echo $prevPost->getPermaLink(); ?>" class="artist-previous">
<i class="icon-arrow-left"></i><?php echo $helper->__('Previous') ?>
</a>
<?php endif; ?>
<?php if ($nextPost instanceof Fishpig_Wordpress_Model_Post && $nextPost->getId()): ?>
<a href="<?php echo $nextPost->getPermaLink(); ?>" class="artist-next">
<i class="icon-arrow-right"></i><?php echo $helper->__('Next') ?>
</a>
<?php endif; ?>
</div>
</div>
<div class="rider-main-info-wrapper wide-panel">
<div class="backgrounds">
<div class="item item_2">
<?php echo $this->getLayout()->createBlock('test_wordpress/slider')->setPost($post)->toHtml(); ?>
</div>
</div>
<div class="rider-main-info row">
<div class="team-rider-details column">
<?php $featuredImage = $post->getFeaturedImage();?>
<?php if ($featuredImage): ?>
<img src="<?php echo $featuredImage->getImageByType('thumb-240x220') ?>" class="detail-rider-image detail-thumbnail" alt="<?php echo $this->escapeHtml($post->getPostTitle()) ?>" />
<?php endif; ?>
<div class="team-rider-info">
<h1 class="dark rider-name"><?php echo $helper->escapeHtml($post->getPostTitle()) ?></h1>
<p class="rider-details-info">
<?php if($post->getCustomField('hometown')): ?>
<span><?php echo $helper->__('From:') ?> <?php echo $helper->escapeHtml($post->getCustomField('hometown')) ?></span>
<?php endif; ?>
<?php if ($post->getCustomField('birthdate') && $helper->getAgeByBirthdate($post->getCustomField('birthdate'))): ?>
<span><?php echo $helper->__('Age:') ?> <?php echo $helper->escapeHtml($helper->getAgeByBirthdate($post->getCustomField('birthdate'))) ?></span>
<?php endif;?>
</p>
</div>
</div>
</div>
</div>
<div class="more-info-wrapper">
<div class="more-info-content row">
<div class="columns">
<div class="rider-arrow-show js-more-content">
<i class="icon-arrow-down"></i>
<span class="more-text"><?php echo $helper->__('more info') ?></span>
<span class="less-text"><?php echo $helper->__('less info') ?></span>
<span class="more-text-mobile"><?php echo $helper->__('more') ?></span>
<span class="less-text-mobile"><?php echo $helper->__('less') ?></span>
</div>
<div class="rider-social-icons">
<a href="http://facebook.com/<?php echo $helper->escapeHtml($helper->__($post->getCustomField('facebook_handle'))); ?>" target="_blank"><i class="icon-facebook-large"></i></a>
<a href="http://twitter.com/<?php echo $helper->escapeHtml($helper->__($post->getCustomField('twitter_handle'))); ?>" target="_blank"><i class="icon-twitter-small"></i></a>
<a href="http://instagram.com/<?php echo $helper->escapeHtml($helper->__($post->getCustomField('insta_handle'))); ?>" target="_blank"><i class="icon-instagram-large"></i></a>
</div>
</div>
</div>
<div class="rider-content-wrapper">
<div class="viewport row">
<div class="overview">
<?php if ($layoutType != 'left'): ?>
<div class="more-left m-grid-8 columns personal-info">
<?php if ($post->getCustomField('birthdate') && $helper->getAgeByBirthdate($post->getCustomField('birthdate'))): ?>
<div>
<label><?php echo $helper->__('Birth Date:') ?></label>
<?php echo $helper->formatDate($post->getCustomField('birthdate'),'m/d/y'); ?><br/>
</div>
<?php endif; ?>
<?php echo $post->getPostContent() ?>
</div>
<?php endif; ?>
<?php if ($layoutType != 'right'): ?>
<div class="more-right m-grid-4 columns">
<?php echo $post->getCustomField('extrastats'); ?>
</div>
<?php endif; ?>
</div>
</div>
</div>
</div>
<?php $instagramContent = $teamHelper->getInstagramBlock($post); ?>
<?php if($instagramContent): ?>
<div class="rider-thumb row">
<?php echo $instagramContent; ?>
</div>
<?php endif; ?>
<?php echo $this->getLayout()->createBlock('test_wordpress/products')->setPost($post)->setTitle($helper->__('%s Wears',$post->getPostTitle()))->toHtml(); ?>
<?php
$isShowNews = false;
$blockNews = $this->getChild('news.related');
if ($blockNews) {
$blockNews->setTag($post->getPostTitle());
$blockNews->setCategory($parent->getSlug());
if ($blockNews->getPostCollection()->count()) {
echo $blockNews->toHtml();
$isShowNews = true;
}
}
if (!$isShowNews) {
$blockNews = $this->getChild('news.resent');
if ($blockNews) {
$blockNews->setCategory($parent->getSlug());
echo $blockNews->toHtml();
}
}
Codrut TG
Según su código publicado parcialmente, solo puedo darle una respuesta conceptual.
Por lo que ha publicado hasta ahora, su única diferencia entre publicaciones nuevas y antiguas podría sintetizarse de dos maneras:
-
Por posfechar, y puede llamar a casi la misma función, pero con la fecha_posterior de la última publicación mostrada como parámetro para que pueda filtrar los nuevos resultados que tienen una fecha_posterior más reciente. Agregar un nuevo cierre antes o después
setOrder(...)
o cambiando wpQuery; -
O por compensar. Teniendo en cuenta que no tendrá publicaciones retroactivas, todas las publicaciones nuevas tendrán un desplazamiento igual al recuento de publicaciones iniciales. así que tendrás que
setOffset($oldCount);
De esta manera, obtendrá las últimas publicaciones a partir de la última publicación mostrada.
Solo tendrá que actualizar la consulta de wp con el parámetro deseado, o encontrar una forma de etiquetar sus publicaciones de alguna otra manera:
- Una forma más fácil sería realizar un seguimiento de los ID de publicación que se muestran en una matriz
$displayed_post_ids
y luego consultar conpost__not_in
como el siguiente ejemplo:
$args = array(
'post_type' => 'post',
//... other args
'post__not_in' => array($displayed_post_ids) // Don't show this posts
);
- Otra alternativa podría ser la post_meta campos. Tendrás más control de esta manera y también puedes usar las mismas categorías antiguas para las publicaciones nuevas.
Puede agregar una información post_meta que no se mostrará en la página y que hará un seguimiento de si sus publicaciones se han mostrado en el primer div o no. Teniendo en cuenta que es más fácil modificar las publicaciones que ya tienes, puedes agregar un post_meta_wasDisplayed
(usando algo comoupdate_post_meta( $post_id, '_wasDisplayed', true);
cuando muestra la publicación en el primer div también puede hacer el truco)
Puede establecer un valor predeterminado falso valor de ese valor post_meta para todas sus publicaciones en la creación. Esto te ayudará en la consulta. En el segundo div, llamará a la función del generador y verificará si sus publicaciones tienen el post_meta y si es falso.
También puede restablecer los valores post_meta más tarde si lo necesita.
Para la implementación también es necesario saber cuántas publicaciones pretende mostrar, si usa paginación y otros pequeños detalles que podrían hacer que su trabajo sea un poco más complejo.
Aviso: esta solución de caso:
5. Como su lógica empresarial parece estar más relacionada con las categorías, existe una solución más sencilla:
En el proceso respaldado que agrega nuevas publicaciones, asigne una categoría adicional a cada nueva publicación (algo llamado: “Nuevas publicaciones no mostradas”), esta categoría se usará como un argumento de filtro en el segundo div. Ten en cuenta que deberás eliminar esta categoría de todas las publicaciones que se publiquen en el momento en que llames al getPostListHtml()
desde el primer div, de lo contrario tendrá publicaciones no deseadas en el segundo div.
Puede hacer que esto suceda en una función contenedora utilizando uno de los argumentos de categoría para el objeto de consulta wp:
Category Parameters
Mostrar publicaciones asociadas con ciertas categorías.
cat (int) - use category id.
category_name (string) - use category slug.
category__and (array) - use category id.
category__in (array) - use category id.
category__not_in (array) - use category id.
Espero que ayude, Codrut, KMM
-
Hola Codrut, entonces no hay forma de que pueda simplemente usar $this->getPostListHtml() pero adjuntar una nueva identificación de categoría a este objeto de publicación. ¿Quizás para obligarlo a mostrar todas las publicaciones de una categoría en particular? @KRONMARK MEDIOS
– este método
26/10/2016 a las 16:49
-
Por supuesto que lo hay. La solución está muy relacionada con la lógica de su aplicación. Actualizaré la respuesta en consecuencia.
– Codrut TG
26/10/2016 a las 22:14
-
¿Solo consultándote la respuesta final? No puedo usar esto porque solo duplicará las publicaciones.
getPostListHtml() ?>– este método
28/10/2016 a las 21:59
-
¿Has resuelto toda la lógica? Quiero decir: 1. Agregue la categoría “NUEVO” a la base de datos y recupere la ID asignada, para filtrar la referencia. 2. Muestre categorías en DIV1 y también elimine la llamada categoría “NUEVA” de las publicaciones mostradas. 3. Configure DIV2 para mostrar solo las publicaciones que están en la categoría “NUEVO”. 4. Establezca la categoría “NUEVO” en las publicaciones recién creadas para que DIV2 las contenga. Y seguramente asegúrese de tener algún mecanismo para garantizar que solo se actualicen los datos DIV2 una vez que haya nuevas publicaciones en el backend. ¡Para el paso 4, debe realizar un cambio en el filtrado e incluir la categoría “NUEVO”!
– Codrut TG
28/10/2016 a las 22:16
la
$this->getPostListHtml()
está relacionado con la categoría, entonces, ¿cómo le gustaría tener otros resultados si llama al mismo método? No estoy seguro de entender qué resultado quieres. Además, $this se refiere a una instancia de un objeto, por lo que necesitamos un poco más de código, ya que no vemos cómo se instancia. Tal vez puedas pasar una categoría.– Sylwit
25/10/2016 a las 17:34
Quiero resultados diferentes y entiendo que tendré que usar un método diferente. Me gustaría pasar una categoría diferente, sí. @Sylwit Publicaré más código para ese objeto y cómo se crea una instancia. Gracias por responder.
– este método
25/10/2016 a las 23:56
Todavía no es suficiente, pegue todos sus dos archivos
– Sylwit
26 de octubre de 2016 a las 1:20
Actualizado con todos los archivos en ese directorio de carpetas. @Sylwit
– este método
26 de octubre de 2016 a las 2:03