в файле theme-functions.php
имеется функция
function tempera_title_and_description()
Как ее отключить по условию? (поставить фильтр?)
Условно! Т.е. по условию.
Т.е. когда доходит до выполнения фунции (или когда она вызывается где бы то ни было) проверяется
наличие содержания метаполе конкретной записи/страницы. Если существует содержание метаполя в записи - функция НЕ выполняется, если не существует - выполняется.
Алексей:
1. Если убрать проверку
if(get_post_meta($post->ID, 'meta_key', true) == 'значение') {
функция перестает срабатывать?
2. Если продолжает работать, то поменять
add_action( 'template_redirect', 'remove_my_action' );
на
add_action( 'wp_head', 'remove_my_action' );
что-то меняется?
3. Мы же говорим об этой функции https://themes.trac.wordpress.org/browser/tempera/... ?
Денис Янчевский: по всей видимости ошибка была в вашем "любимом" remove_my_action ))) вы мне в прошлый раз насоветовали и в этот)) одинаковые названия конфликтовали.
Денис Янчевский: а как можно проверять наличие метаполя у любой "сущности" метаполя? Т.е. если выводится какая то страница, будь то запись, страница рубрики или вообще "ничего ненайдено). Проверялось есть у этой сущности определеннок метаполе и отключалась фунция при наличии?
Например, сейчас у меня плагином добаилены метаполя к рубрикам.
Денис Янчевский: И не подскажите как самому научиться определять что к чему продвешано? Как вы вот это определили "Судя по коду, эта функция прикреплена к хуку cryout_branding_hook."
Денис Янчевский: т.е как здесь get_post_meta($post->ID, 'my_map', true) ) вместо $post->ID обратиться к любой текущей "сущности", при этом что, если нет метаполей вообще, не выдавалась ошибка.
Денис Янчевский: возникла следующая проблема, по всей видимости вывод начинается не тогда когда отключаемая функция должна работать, а значительно раньше, по всей видимости когда код формируется Пытаюсь сделать буфер
/*
* Plugin Name: selftrips2
*/
add_action( 'template_redirect', 'remove_my_action_2' );
function remove_my_action_2(){
ob_start();
global $post;
// if(get_post_meta($post->ID, 'my_map', true) == 'значение') {
if ($althimg = get_post_meta($post->ID, 'my_map', true) != '') {
remove_action( 'cryout_branding_hook', 'tempera_title_and_description');
$althimg = get_post_meta(get_the_ID(), 'my_map', true);
echo $althimg;
$html = ob_get_contents();
ob_end_clean();
return $html;
}
}
вообще ничего не выводится (т.е. не выводится вот это echo $althimg;)
Как это можно решить?
Алексей: хук template_redirect не предназначен чтобы что-то выводить. Если Вам нужно что-то вывести в том месте, где раньше была старая функция, то просто создайте свою функцию и прикрепите её к хуку cryout_branding_hook.
Денис Янчевский: спасибо.
Еще вопрос. 2 раза вызывается get_post_meta(). стоит ли заморачитаться чтобы вызывать только один раз и как это можно сделать?
<?php
/*
* Plugin Name: selftrips2
*/
add_action( 'template_redirect', 'remove_my_action_2' );
function remove_my_action_2(){
global $post;
if (get_post_meta($post->ID, 'my_map', true) != '') {
remove_action( 'cryout_branding_hook', 'tempera_title_and_description');
add_action( 'cryout_branding_hook', 'vivod_karty');
}
}
function vivod_karty(){
$althimg = get_post_meta(get_the_ID(), 'my_map', true);
echo $althimg;
}